我有一个数据框架,它看起来像这样:
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的几种方法,但没有积极的结果。
任何帮助,非常感谢!
我认为您需要首先通过boolean indexing
与Series.gt
过滤正值,然后通过DataFrameGroupBy.idxmax
为索引获得每个CARD
最大COD_DAY
的行,最后传递到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