我有这样的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
我希望我能用熊猫做到这一点。有什么想法吗?
我认为首先需要通过query
或boolean 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