在多列上合并 2 pandas 个数据框
Merge 2 pandas data frames on multiple columns
我有 2 个数据框,其中一个包含前几个月的预测值和实际值。如下所示,它有 1 月和 2 月的预测。 2 月的值为 Null。
DF1
日期
密钥
价值
预测
1-1-21
一个
33211
22123
1-1-21
BA
43231
32132
1-1-21
C
13431
43432
1-2-21
一个
南
23421
1-2-21
BA
南
44443
1-2-21
C
南
32133
第二个数据框有二月份的日期、键和值。我想将它们合并形成一个新的 table,其中包含所有实际值和一个预测 table
DF2
日期
密钥
价值
1-2-21
一个
33212
1-2-21
BA
52121
1-2-21
C
23123
我想将键和日期上的值合并到第一个 table 中。最终应该是这样的
日期
密钥
价值
预测
1-1-21
一个
33211
22123
1-1-21
BA
43231
32132
1-1-21
C
13431
43432
1-2-21
一个
33212
23421
1-2-21
BA
52121
44443
1-2-21
C
23123
32133
我试过 pd.merge
它创建了一个新列而不是加入一列,并且 pd.join
但是它进行了左连接并删除了一些预测数据。
合并首先简单地附加到数据
这可能是一种在一行(虽然很长)中完成此操作的方法:
df1['Value'] = df1.apply(lambda row: row['Value'] if pd.notna(row['Value']) else df2[(df2['Date'] == row['Date']) & (df2['Key'] == row['Key'])].iloc[0]['Value'], axis=1)
我有 2 个数据框,其中一个包含前几个月的预测值和实际值。如下所示,它有 1 月和 2 月的预测。 2 月的值为 Null。
DF1
日期 | 密钥 | 价值 | 预测 |
---|---|---|---|
1-1-21 | 一个 | 33211 | 22123 |
1-1-21 | BA | 43231 | 32132 |
1-1-21 | C | 13431 | 43432 |
1-2-21 | 一个 | 南 | 23421 |
1-2-21 | BA | 南 | 44443 |
1-2-21 | C | 南 | 32133 |
第二个数据框有二月份的日期、键和值。我想将它们合并形成一个新的 table,其中包含所有实际值和一个预测 table
DF2
日期 | 密钥 | 价值 |
---|---|---|
1-2-21 | 一个 | 33212 |
1-2-21 | BA | 52121 |
1-2-21 | C | 23123 |
我想将键和日期上的值合并到第一个 table 中。最终应该是这样的
日期 | 密钥 | 价值 | 预测 |
---|---|---|---|
1-1-21 | 一个 | 33211 | 22123 |
1-1-21 | BA | 43231 | 32132 |
1-1-21 | C | 13431 | 43432 |
1-2-21 | 一个 | 33212 | 23421 |
1-2-21 | BA | 52121 | 44443 |
1-2-21 | C | 23123 | 32133 |
我试过 pd.merge
它创建了一个新列而不是加入一列,并且 pd.join
但是它进行了左连接并删除了一些预测数据。
合并首先简单地附加到数据
这可能是一种在一行(虽然很长)中完成此操作的方法:
df1['Value'] = df1.apply(lambda row: row['Value'] if pd.notna(row['Value']) else df2[(df2['Date'] == row['Date']) & (df2['Key'] == row['Key'])].iloc[0]['Value'], axis=1)