Python 合并两个DF';s在最短日期记录上,并删除不匹配的日期行

Python 合并两个DF';s在最短日期记录上,并删除不匹配的日期行,python,pandas,merge,multiple-columns,missing-data,Python,Pandas,Merge,Multiple Columns,Missing Data,我有两个df的,我需要合并成一个新的df的基础上的日,月和年的df与最短的记录,日,月和年。换句话说,如果“日”、“月”和“年”列在比较中不匹配,那么我需要删除这些行或不匹配。具有最长记录或日、月和年行的df为“ncm”df,如下所示: ncm.head() Out[358]: plant_name month year power_kwh 0 ALBUREJOS 1 2018 2634.583602 1 ALBUREJOS 1 2019 1947

我有两个df的,我需要合并成一个新的df的基础上的日,月和年的df与最短的记录,日,月和年。换句话说,如果“日”、“月”和“年”列在比较中不匹配,那么我需要删除这些行或不匹配。具有最长记录或日、月和年行的df为“ncm”df,如下所示:

ncm.head()
Out[358]: 
  plant_name  month  year    power_kwh
0  ALBUREJOS      1  2018  2634.583602
1  ALBUREJOS      1  2019  1947.384812
2  ALBUREJOS      1  2020  1787.296640
3  ALBUREJOS      2  2018  1539.008929
4  ALBUREJOS      2  2019  4948.003274
dfm.head()
Out[359]: 
  plant_name  month  year  power_obs_kwh
0  ALBUREJOS      1  2018    2631.353970
1  ALBUREJOS      1  2019    1931.685916
2  ALBUREJOS      1  2020    1750.192298
3  ALBUREJOS      1  2021     314.000000
4  ALBUREJOS      2  2018    1537.588323
我需要与一些缺失的数据和较短的日期数(日、月和年)合并的第二个df是df“dfm”,如下所示:

ncm.head()
Out[358]: 
  plant_name  month  year    power_kwh
0  ALBUREJOS      1  2018  2634.583602
1  ALBUREJOS      1  2019  1947.384812
2  ALBUREJOS      1  2020  1787.296640
3  ALBUREJOS      2  2018  1539.008929
4  ALBUREJOS      2  2019  4948.003274
dfm.head()
Out[359]: 
  plant_name  month  year  power_obs_kwh
0  ALBUREJOS      1  2018    2631.353970
1  ALBUREJOS      1  2019    1931.685916
2  ALBUREJOS      1  2020    1750.192298
3  ALBUREJOS      1  2021     314.000000
4  ALBUREJOS      2  2018    1537.588323
我已经尝试了下面这样的多次迭代,并且已经达到了这里所示的错误

new_df = dfm.merge(ncm, left_on=['month','year'], right_on = ['power_kwh'], how='left')
错误消息:

ValueError: len(right_on) must equal len(left_on)
感谢您的见解。

在中,参数
左上
右上
必须是要用于连接两个数据帧的列,因此它们必须相同。在您的情况下,由于列具有相同的名称,您可以改为在上使用

dfm.merge(ncm, on=['month','year'])
比如说

np.random.seed(42)
df_1 = pd.DataFrame({
    'month': np.random.choice(np.arange(1, 13), 100),
    'year': np.random.choice(np.arange(2010, 2019), 100),
    'some_data_1': np.random.random(100)
})
np.random.seed(33)
df_2 = pd.DataFrame({
    'month': np.random.choice(np.arange(1, 13), 100),
    'year': np.random.choice(np.arange(2010, 2019), 100),
    'some_data_2': np.random.random(100)
})
然后我们就这么做了

df_1.merge(
    df_2,
    on=['month', 'year']
)

     month  year  some_data_1  some_data_2
0        7  2018     0.242055     0.646164
1        7  2018     0.649633     0.646164
2        4  2016     0.672136     0.936810
3       11  2018     0.761620     0.419030
4       11  2018     0.761620     0.533564
..     ...   ...          ...          ...
101      9  2010     0.853009     0.856196
102      9  2010     0.853009     0.602498
103      9  2010     0.853009     0.713095
104      5  2015     0.428184     0.377500
105     12  2010     0.294449     0.455945

[106 rows x 4 columns]