簡體   English   中英

pandas groupby 並聚合參數“as_index”的多個值

[英]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.

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