如何使用数据透视表或分组表来划分这些值
Posted
技术标签:
【中文标题】如何使用数据透视表或分组表来划分这些值【英文标题】:how to divide these values using pivot or groupby table 【发布时间】:2020-06-13 04:27:34 【问题描述】:有一个从 1 到 100 的等级列表,分配给 1000 人进行多项考试
片段:
name rank
mark 1
stuart 2
lee 15
lenord 8
sheldon 99
cubbon 26
stuart 35
lee 40
lenord 66
mark 9
sheldon 1
cubbon 2
mark 100
mark 6
使用 pivot 和 groupby 如何根据计数来划分这样的东西
name 0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-100
mark 3 0 0 0 0 0 0 0 0 1
stuart 1 0 0 1 0 0 0 0 0 0
lee 0 1 0 0 1 0 0 0 0 0
lenord 1 0 0 0 0 0 1 0 0 0
sheldon 1 0 0 0 0 0 0 0 0 1
cubbon 1 0 1 0 0 0 0 0 0 0
尝试了 pivot 和 groupby ,但是如何自动而不是手动创建 0-10 ..... 90-100 列
试过这个:但是需要很长时间
rank_1_10=df[(df['rank'] >= 0) & (df['rank'] <= 10)]
rank_1_10=rank_1_10.groupby(['name']).agg('rank': 'count')
......
rank_100=df[(df['rank'] >= 90) & (df['rank'] <= 100)]
rank_10=rank_100.groupby(['name']).agg('rank': 'count')
那我把这些都合并了,有什么简单的方法
【问题讨论】:
@jezrael 尝试关注该帖子但无法弄清楚 那你试试? 发布数据有分箱值,但我的是将这些分成单独的列。刚开始学习 groupby , aggregation , pivot 。 ***.com/questions/51745831/…的可能重复 @Pygirl - 不,因为没有标签,没有重新索引。 【参考方案1】:使用cut
by np.arange
和zip
创建的标签,最后一个值不同,因此更正了在 bin 中添加 1
并在标签中减去 1
:
bins = np.arange(0, 110, 10)
#dynamically create labels
labels = ['-'.format(i, j-1) for i, j in zip(bins[:-1], bins[1:])]
bins[-1] += 1
labels[-1] = '-'.format(bins[-2], bins[-1]-1)
df['binned'] = pd.cut(df['rank'], bins = bins, labels=labels, right=False)
print (df)
name rank binned
0 mark 1 0-9
1 stuart 2 0-9
2 lee 15 10-19
3 lenord 8 0-9
4 sheldon 99 90-100
5 cubbon 26 20-29
6 stuart 35 30-39
7 lee 40 40-49
8 lenord 66 60-69
9 mark 9 0-9
10 sheldon 1 0-9
11 cubbon 2 0-9
12 mark 100 90-100
13 mark 6 0-9
然后对于计数使用crosstab
和DataFrame.reindex
来添加所有不存在的列:
df1 = pd.crosstab(df['name'], df['binned']).reindex(labels, axis=1, fill_value=0)
print (df1)
binned 0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-100
name
cubbon 1 0 1 0 0 0 0 0 0 0
lee 0 1 0 0 1 0 0 0 0 0
lenord 1 0 0 0 0 0 1 0 0 0
mark 3 0 0 0 0 0 0 0 0 1
sheldon 1 0 0 0 0 0 0 0 0 1
stuart 1 0 0 1 0 0 0 0 0 0
【讨论】:
以上是关于如何使用数据透视表或分组表来划分这些值的主要内容,如果未能解决你的问题,请参考以下文章