簡體   English   中英

Pandas value_counts 組總和取決於 groupby.agg 中的另一列 function

[英]Pandas value_counts group sum dependent on another column within a groupby.agg function

我目前正在聚合一組由變量var1 and var2分組和聚合的變量。 假設我確實有連續變量var3, var4, var5 ,我可以在其中輕松計算聚合組內的平均值、標准差、最小值、最大值和中值。 但是,我還有另外兩個變量var6 and var7 ,其中var6是分類變量,而連續var7變量顯示var6的大小。 我的 dataframe 如下所示:

var1 var2 var3 var4 var5 var6 var7
1    a    3    8     9   0    125
1    a    4    0     12  0    12 
1    a    12   4     12  2    3
1    b    24   5     1   1    45
2    a    1    19    4   1    76
2    a    2    37    12  1    12
2    c    3    93    156 1    341
2    c    57   1     87  2    73
2    c    42   4     95  2    95
3    b    12   11    0   0    11
3    b    119  0     901 0    5

第一部分,我計算分組聚合很容易如下(例如):

desired_df=my_df.groupby(['var1', 'var2']).agg(
    max_var3=('var3', 'max')
    mean_var4=(var4, 'min'))

我希望在此聚合之上做的是對var6var7進行分組,並將它們作為新列放在聚合旁邊。 以下是我喜歡做的事情:

var1 var2 var6_group0_sum var6_group1_sum var6_group2_sum
1    a        137         0               3
1    b        0           0               45
2    a        0           88              0
2    c        0           341             168
3    b        16           0               0

如何在分組聚合中實現這一點? 任何幫助表示贊賞。

獲取沒有分類列的聚合(復制並粘貼您的代碼):

left = (df.groupby(['var1', 'var2'])
         .agg(max_var3=('var3', 'max'),
              mean_var4=('var4', 'min'))
        )

僅獲取分類列的聚合:

right = (df.groupby(['var1', 'var2', 'var6'])
           .var7
           .sum()
           .unstack(-1, fill_value = 0)
           .rename(columns = lambda col: f'var6_group{col}_sum')
           .rename_axis(columns = None)
          )

合並兩個數據框,注意它們共享相同的索引:

pd.concat([left, right], axis = 1)

           max_var3  mean_var4  var6_group0_sum  var6_group1_sum  var6_group2_sum
var1 var2                                                                        
1    a           12          0              137                0                3
     b           24          5                0               45                0
2    a            2         19                0               88                0
     c           57          1                0              341              168
3    b          119          0               16                0                0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM