繁体   English   中英

python pandas 分组依据和聚合列

[英]python pandas group by and aggregate columns

我正在使用熊猫版本 0.23.0。 我想使用按 function 分组的数据框来使用 [lambda] 函数生成新的聚合列。

我的数据框看起来像

ID Flag Amount User
 1  1    100    123345
 1  1    55     123346
 2  0    20     123346
 2  0    30     123347
 3  0    50     123348

我想生成一个看起来像的表

ID Flag0_Count Flag1_Count  Flag0_Amount_SUM    Flag1_Amount_SUM  Flag0_User_Count Flag1_User_Count
 1  2           2           0                   155                0                2
 2  2           0           50                  0                  2                0
 3  1           0           50                  0                  1                0

这里:

  1. Flag0_Count 是 Flag = 0 的计数
  2. Flag1_Count 是 Flag = 1 的计数
  3. Flag0_Amount_SUM 是 Flag = 0 时金额的 SUNM
  4. Flag1_Amount_SUM 是 Flag = 1 时金额的 SUNM
  5. Flag0_User_Count 是 Flag = 0 时的不同用户计数
  6. Flag1_User_Count 是 Flag = 1 时的不同用户计数

我试过类似的东西

df.groupby(["ID"])["Flag"].apply(lambda x: sum(x==0)).reset_index()

但它创建了一个新的数据框。 这意味着我必须对所有列都这样做,并将它们合并到一个新的数据框中。 有没有更简单的方法来完成这个?

按列名称字典使用DataFrameGroupBy.agg聚合 function,然后通过unstack重塑,展平列的MultiIndexrename列和最后一个reset_index

df = (df.groupby(["ID", "Flag"])
      .agg({'Flag':'size', 'Amount':'sum', 'User':'nunique'})
      .unstack(fill_value=0))

#python 3.6+
df.columns = [f'{i}{j}' for i, j in df.columns]
#python below
#df.columns = [f'{}{}'.format(i, j) for i, j in df.columns]
d = {'Flag0':'Flag0_Count',
     'Flag1':'Flag1_Count',
     'Amount0':'Flag0_Amount_SUM',
     'Amount1':'Flag1_Amount_SUM',
     'User0':'Flag0_User_Count',
     'User1':'Flag1_User_Count',
     }
df = df.rename(columns=d).reset_index()
print (df)

   ID  Flag0_Count  Flag1_Count  Flag0_Amount_SUM  Flag1_Amount_SUM  \
0   1            0            2                 0               155   
1   2            2            0                50                 0   
2   3            1            0                50                 0   

   Flag0_User_Count  Flag1_User_Count  
0                 0                 2  
1                 2                 0  
2                 1                 0  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM