![](/img/trans.png)
[英]Pandas groupby 2 coluns/conditions then value_counts() by another column?
[英]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'))
我希望在此聚合之上做的是對var6
和var7
進行分組,並將它們作為新列放在聚合旁邊。 以下是我喜歡做的事情:
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.