我有一个看起来像这样的数据框:
CARD CALL COD_DAY
0 5713 0.0 20200716
1 5713 1.0 20200811
2 5713 2.0 20200620
3 5713 3.0 20200619
4 5713 4.0 20200601
... ... ... ...
2135283 73306036 0.0 20200930
2135284 73306055 12.0 20200930
2135285 73306479 9.0 20200930
2135286 73306656 3.0 20200930
2135287 73306676 1.0 20200930
我只想选择 COD_DAY 最高且 CALL 大于零的 CARD。 我用 groupby 尝试了几种方法,但没有积极的结果。
非常感谢任何帮助!
答案 0 :(得分:1)
我认为您需要首先通过 boolean indexing
和 Series.gt
过滤正值,然后通过 DataFrameGroupBy.idxmax
获取最大 COD_DAY
每 CARD
的行,用于索引和最后传递给DataFrame.loc
:
df = df.loc[df[df['CALL'].gt(0)].groupby('CARD')['COD_DAY'].idxmax()]
print (df)
CARD CALL COD_DAY
1 5713 1.0 20200811
2135284 73306055 12.0 20200930
2135285 73306479 9.0 20200930
2135286 73306656 3.0 20200930
2135287 73306676 1.0 20200930
如果不是每组需要一张卡:
card = df.loc[df.loc[df['CALL'].gt(0), 'COD_DAY'].idxmax(), 'CARD']
print (card)
73306055