熊猫分组并聚合参数“as_index”的多个值

时间:2021-03-17 10:34:09

标签: python pandas

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',
                                                                                                             })```

1 个答案:

答案 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