[英]pandas groupby and aggregate multiple values for argument 'as_index'
ctr date cw mon year size teu DN# AN# kit vol len W H QTY
abc123 6/10/2020 24 6 2020 40 2 1872 29937 y 74088 42 42 42 1
abc123 6/10/2020 24 6 2020 40 2 1872 29936 y 69184 47 46 32 1
abc123 6/10/2020 24 6 2020 40 2 1872 29932 y 92120 98 47 20 19
abc123 6/10/2020 24 6 2020 40 2 1872 29932 y 92120 98 47 20 375
abc123 6/10/2020 24 6 2020 40 2 1872 29934 y 106848 56 53 36 1
abc123 6/10/2020 24 6 2020 40 2 1872 29934 y 106848 56 53 36 142
abc123 6/10/2020 24 6 2020 40 2 1872 30994 y 76824 97 44 18 1
abc123 6/10/2020 24 6 2020 40 2 1872 30994 y 76824 97 44 18 125
dataframe 是“ctr”的子集,需要在唯一的 AN# 上進行分組和聚合,並保持所有內容相同。對於“vol”、“len”、“W”、“H”,只有最大值和'QTY' 應如下所示相加。
所需的 output:
ctr date cw mon year size teu DN# AN# kit vol len W H QTY
abc123 6/10/2020 24 6 2020 40 2 1872 29937 y 74088 42 42 42 1
abc123 6/10/2020 24 6 2020 40 2 1872 29936 y 69184 47 46 32 1
abc123 6/10/2020 24 6 2020 40 2 1872 29932 y 92120 98 47 20 394
abc123 6/10/2020 24 6 2020 40 2 1872 29934 y 106848 56 53 36 143
abc123 6/10/2020 24 6 2020 40 2 1872 30994 y 76824 97 44 18 126
我已經嘗試了以下變體,但沒有任何運氣。
df.groupby('AN#', as_index=False).agg({'Vol':'max',
'Len':'max',
'W':'max',
'H':'max',
'QTY':'sum',
})```
我認為您需要GroupBy.transform
填充由最大值和總和值填充的列,然后使用DataFrame.drop_duplicates
:
c = ['vol','len','W','H']
df[c] = df.groupby('AN#')[c].transform('max')
df['QTY'] = df.groupby('AN#')['QTY'].transform('sum')
df = df.drop_duplicates('AN#')
print (df)
ctr date cw mon year size teu DN# AN# kit vol len \
0 abc123 6/10/2020 24 6 2020 40 2 1872 29937 y 74088 42
1 abc123 6/10/2020 24 6 2020 40 2 1872 29936 y 69184 47
2 abc123 6/10/2020 24 6 2020 40 2 1872 29932 y 92120 98
4 abc123 6/10/2020 24 6 2020 40 2 1872 29934 y 106848 56
6 abc123 6/10/2020 24 6 2020 40 2 1872 30994 y 76824 97
W H QTY
0 42 42 1
1 46 32 1
2 47 20 394
4 53 36 143
6 44 18 126
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.