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' 只是最大值值和“数量”的总和如下所示。
预期输出:
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',
})```
答案 0 :(得分:0)
我认为您需要 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