pandas group分组与agg聚合

https://blog.csdn.net/u012706792/article/details/80892510


  
  
  1. import pandas as pd
  2. df = pd.DataFrame({ 'Country':[ 'China', 'China', 'India', 'India', 'America', 'Japan', 'China', 'India'],
  3. 'Income':[ 10000, 10000, 5000, 5002, 40000, 50000, 8000, 5000],
  4. 'Age':[ 5000, 4321, 1234, 4010, 250, 250, 4500, 4321]})

构造的数据如下:


  
  
  1. Age Country Income
  2. 0 5000 China 10000
  3. 1 4321 China 10000
  4. 2 1234 India 5000
  5. 3 4010 India 5002
  6. 4 250 America 40000
  7. 5 250 Japan 50000
  8. 6 4500 China 8000
  9. 7 4321 India 5000

分组

单列分组


  
  
  1. df_gb = df.groupby( 'Country')
  2. for index, data in df_gb:
  3. print(index)
  4. print(data)
  5. 输出
  6. America
  7. Age Country Income
  8. 4 250 America 40000
  9. China
  10. Age Country Income
  11. 0 5000 China 10000
  12. 1 4321 China 10000
  13. 6 4500 China 8000
  14. India
  15. Age Country Income
  16. 2 1234 India 5000
  17. 3 4010 India 5002
  18. 7 4321 India 5000
  19. Japan
  20. Age Country Income
  21. 5 250 Japan 50000

多列分组


  
  
  1. df_gb = df.groupby([ 'Country', 'Income'])
  2. for (index1, index2), data in df_gb:
  3. print((index1, index2))
  4. print(data)
  5. 输出
  6. ( 'America', 40000)
  7. Age Country Income
  8. 4 250 America 40000
  9. ( 'China', 8000)
  10. Age Country Income
  11. 6 4500 China 8000
  12. ( 'China', 10000)
  13. Age Country Income
  14. 0 5000 China 10000
  15. 1 4321 China 10000
  16. ( 'India', 5000)
  17. Age Country Income
  18. 2 1234 India 5000
  19. 7 4321 India 5000
  20. ( 'India', 5002)
  21. Age Country Income
  22. 3 4010 India 5002
  23. ( 'Japan', 50000)
  24. Age Country Income
  25. 5 250 Japan 50000

聚合

对分组后数据进行聚合

默认情况对分组之后其他列进行聚合


  
  
  1. df_agg = df.groupby( 'Country').agg([ 'min', 'mean', 'max'])
  2. print(df_agg)
  3. 输出
  4. Age Income
  5. min mean max min mean max
  6. Country
  7. America 250 250.000000 250 40000 40000.000000 40000
  8. China 4321 4607.000000 5000 8000 9333.333333 10000
  9. India 1234 3188.333333 4321 5000 5000.666667 5002
  10. Japan 250 250.000000 250 50000 50000.000000 50000

对分组后的部分列进行聚合

某些情况,只需要对部分数据进行不同的聚合操作,可以通过字典来构建


  
  
  1. num_agg = { 'Age':[ 'min', 'mean', 'max']}
  2. print(df.groupby( 'Country').agg(num_agg))
  3. 输出
  4. Age
  5. min mean max
  6. Country
  7. America 250 250.000000 250
  8. China 4321 4607.000000 5000
  9. India 1234 3188.333333 4321
  10. Japan 250 250.000000 250

  
  
  1. num_agg = { 'Age':[ 'min', 'mean', 'max'], 'Income':[ 'min', 'max']}
  2. print(df.groupby( 'Country').agg(num_agg))
  3. 输出
  4. Age Income
  5. min mean max min max
  6. Country
  7. America 250 250.000000 250 40000 40000
  8. China 4321 4607.000000 5000 8000 10000
  9. India 1234 3188.333333 4321 5000 5002
  10. Japan 250 250.000000 250 50000 50000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值