熊猫,在多个列上合并两个数据框,然后相乘结果

时间:2019-02-12 20:05:08

标签: python pandas dataframe

我有一个数据框df1,看起来像这样:

Name Event Factor1
John A     2
John B     3
Ken  A     1.5
....

和其他数据框df2,如下所示:

Name Event Factor2
John A     1.2
John B     .5
Ken  A     2

我想在“名称”和“事件”两列上同时连接这两个数据框,使结果列1和2彼此相乘。

Name Event FactorResult
John A     2.4
John B     1.5
Ken  A     3

什么是最好的方法?我不确定如何在两列中加入这些内容。我知道我可以先合并然后再乘以两列,但是我想知道是否有比先合并然后再乘除不需要的列更好的方法?

3 个答案:

答案 0 :(得分:5)

如果数据框的标签相同,则无需合并,

(df1.set_index(['Name', 'Event'])['Factor1'] * df2.set_index(['Name', 'Event'])['Factor2']).reset_index(name = 'FactorResult')

    Name    Event   FactorResult
0   John    A       2.4
1   John    B       1.5
2   Ken     A       3.0

答案 1 :(得分:2)

您可以merge并将它们相乘:

merged = df1.merge(df2, on=['Name', 'Event'])
merged['ResultFactor'] = merged.Factor1 * merged.Factor2
result = merged.drop(['Factor1', 'Factor2'], axis=1)

print(result)

输出

   Name Event  ResultFactor
0  John     A           2.4
1  John     B           1.5
2   Ken     A           3.0

答案 2 :(得分:1)

df  = pd.merge(left=df1, right=df2, on=['Name','Event'], how='inner']
df['FactorResult'] = df['Factor1'] * df['Factor2']
df = df[['Name', 'Event', 'FactorResult']]