pandas groupby忽略了一些行

问题描述 投票:1回答:1

我有这样的DataFrame

            W2     N      V1     V2

            ba     EX     62069  30014
            ba     ADV    12325  8218 
            ba     X      23     22 
            b      X      164831 39425 
            b      PRT    41543  16708

我需要在W2中使用相同的值来汇总V1,V2值。这一行应该是V1 == max。我这样做:

   df_4=df_2.sort_values(['W2','V1'],ascending=[True, False]).drop_duplicates(['W2'])
   df_3= df_2.groupby(['W2'],as_index=False).sum()

但是当我搜索max时我需要忽略行,其中N == EX(只有max,sum应该包括这行的V1和V2)。所以结果应该是:

        W2     N      V1     V2

        ba     ADV    74417  38254
        b      X      206374 56133

我希望我能用熊猫做到这一点。有什么想法吗?

python pandas
1个回答
0
投票

我认为首先需要通过queryboolean indexing过滤掉行,并且仅为set_index添加N和select map列,如果需要通过reindex更改最终顺序,请添加df_2

s = (df_2.query('N != "EX"')
         .sort_values(['W2','V1'],ascending=[True, False])
         .drop_duplicates(['W2'])
         .set_index('W2')['N'])

s = (df_2[df_2['N'] != "EX"]
        .sort_values(['W2','V1'],ascending=[True, False])
        .drop_duplicates(['W2'])
        .set_index('W2')['N'])
print (s)
W2
b       X
ba    ADV
Name: N, dtype: object

df_3 = df_2.groupby('W2', as_index=False, sort=False).sum()
df_3['N'] = df_3['W2'].map(s)
df_3 = df_3.reindex(columns=df_2.columns)
print (df_3)
   W2    N      V1     V2
0  ba  ADV   74417  38254
1   b    X  206374  56133
© www.soinside.com 2019 - 2024. All rights reserved.