Pandas数据透视表:按值对列进行分组

6

我将尝试在Pandas的透视表中使用数字值作为列。问题是,由于每个数字大多是唯一的,所以得到的透视表并不能很好地聚合我的数据。

以下是我目前的代码(示例假数据):

import pandas as pd   

df = pd.DataFrame({'Country': ['US', 'Brazil', 'France', 'Germany'], 
                       'Continent': ['Americas', 'Americas', 'Europe', 'Europe'], 
                       'Population': [321, 207, 80, 66]})


pd.pivot_table(df, index='Continent', columns='Population', aggfunc='count')

这是生成的图表的图片pivot_table
我该如何根据列将我的值分组成范围?
换句话说,我怎样才能计算所有人口...<100、100-200、>300的国家数量?
1个回答

7

使用 pd.cut:

df = df.assign(PopGroup=pd.cut(df.Population,bins=[0,100,200,300,np.inf],labels=['<100','100-200','200-300','>300']))

输出:

  Continent  Country  Population PopGroup
0  Americas       US         321     >300
1  Americas   Brazil         207  200-300
2    Europe   France          80     <100
3    Europe  Germany          66     <100

pd.pivot_table(df, index='Continent', columns='PopGroup',values=['Country'], aggfunc='count')

输出:

        Country          
PopGroup  200-300 <100 >300
Continent                  
Americas      1.0  NaN  1.0
Europe        NaN  2.0  NaN

非常好的解决方案 - 谢谢! - Bruno Vieira
@BrunoVieira,请考虑接受一个答案,如果你认为它回答了你的问题。 - MaxU - stand with Ukraine
完成了!谢谢你提醒我(那是我第一个问题)。 - Bruno Vieira
如果默认情况下参数 right 为 true,那么这是否意味着 100 的区间应该标记为 '<= 100' 而不是 '<100'? - 3pitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接