【问题标题】:Merging two DF's on shortest date record and delete non-matching date rows在最短日期记录上合并两个 DF 并删除不匹配的日期行
【发布时间】:2021-06-23 16:00:44
【问题描述】:

我有两个 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

并且,我需要与一些缺失数据和较短日期(日、月和年)合并的第二个 df 是 df "dfm",如下所示:

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)

感谢您的洞察力。

【问题讨论】:

    标签: python pandas merge multiple-columns missing-data


    【解决方案1】:

    merge 中,参数left_onright_on 必须是您要用于连接两个DataFrame 的列,因此它们必须相同。在您的情况下,由于列具有相同的名称,您可以改用 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]
    

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      相关资源
      最近更新 更多