我有两个数据框,想要根据另一列的最大值
合并它df1:
C2
A
B
C
df2:
C1 C2 val
X A 100
Y A 50.5
Z A 60
E B 90
F B 45
G C 100
我试过了,
df3 = df1.merge(df2, on='C2', how='inner')['val'].max()
我收到错误AttributeError: 'numpy.float64' object has no attribute 'head'
val列只有数字。我应该如何修改这个?为什么我会遇到这个错误?
预期输出为:
df3:
C2 C1 val
A X 100
B E 90
C G 100
提前致谢。
答案 0 :(得分:1)
我认为你需要左边加入merge
:
df3 = df2.merge(df1, on='C2', how='left')
然后使用groupby
idxmax
获取每组最大值的索引,并按loc
选择行:
df3 = df3.loc[df3.groupby('C2')['val'].idxmax()]
或者sort_values
使用drop_duplicates
:
df3 = df3.sort_values(['C2', 'val']).drop_duplicates('C2', keep='last')
print (df3)
C1 C2 val
0 X A 100.0
3 E B 90.0
5 G C 100.0
为什么我会遇到此错误?
问题是你得到了标量 - 列val
的最大值:
df3 = df1.merge(df2, on='C2', how='inner')['val'].max()
print (df3)
100.0
因此,如果使用print (df3.head())
则失败。