我有一个如下所示的数据框:
Reference | ID | Length
ref101 |123456 | 10
ref101 |123789 | 5
ref202 |654321 | 20
ref202 |653212 | 40
我正在尝试确定Reference
列中每行的哪一行具有最大长度(基于Length
列中的值)。例如,ref101
ID
123456
的长度大于ID为123789的ref101
。
我一直在玩.groupby()
,但我无处可去。有没有办法在熊猫中进行这种操作?
答案 0 :(得分:6)
如果它是您想要的整行,请使用groupby
+ idxmax
:
df.loc[df.groupby('Reference').Length.idxmax()]
Reference ID Length
0 ref101 123456 10
3 ref202 653212 40
如果您希望只长度,那么groupby
+ max
就足够了:
df.groupby('Reference').Length.max()
Reference
ref101 10
ref202 40
Name: Length, dtype: int64
答案 1 :(得分:2)
idxmax
有一种方法,它会返回每组最大长度的索引
df.groupby('Reference').Length.idxmax()
Out[495]:
Reference
ref101 0
ref202 3
Name: Length, dtype: int64
或nlargest
df.groupby('Reference').Length.nlargest(1)
Out[496]:
Reference
ref101 0 10
ref202 3 40
Name: Length, dtype: int64
答案 2 :(得分:0)
还有一个:
df = df.sort_values(['Reference', 'Length'], ascending=False).drop_duplicates(['Reference'])
答案 3 :(得分:0)
sort_values
上有Length
,后跟groupby
,head(1)
占据第一位:
result_df = df.sort_values('Length',ascending=False).groupby('Reference').head(1))
print(result_df)
结果:
Reference ID Length
3 ref202 653212 40
0 ref101 123456 10