熊猫合并条件

时间:2018-01-26 14:37:34

标签: python-3.x pandas merge

我有两个数据框,想要根据另一列的最大值

合并它
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

提前致谢。

1 个答案:

答案 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())则失败。