【问题标题】:Merge multiple dataframes on date with not same values合并日期上具有不同值的多个数据框
【发布时间】:2021-06-07 09:28:12
【问题描述】:

我有 4 个数据框:jpnswesvkaut,其中每个数据框都有两列 year~_co2 以及一些索引,我不关心。


>>>swe
        year    swe_co2
20105   1834    0.033
20106   1839    0.044

>>>svk
        year    svk_co2
15247   1840    0.013
15248   1841    0.023

每个数据框都有这样的结构,但year 列并不是每个值都在同一年开始。

我想加入这个数据框来创建一个像这样的新数据框


>>>merger

        year    swe_co2    svk_co2
1       1834    0.033      None
2       1839    0.044      None
3       1840    0.047      0.013
4       1841    None       0.023

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用pd.concat

    pd.concat([swe, svk], ignore_index=True)
    
        year    swe_co2 svk_co2
    0   1834    0.033   NaN
    1   1839    0.044   NaN
    2   1840    NaN     0.013
    3   1841    NaN     0.023
    

    如果您有两个以上的数据框,只需将它们附加到该列表中 [swe, svk, df3, df4, ...]

    【讨论】:

    • 另外我想问一下:这种方法在year 列中创建了重复项,例如每个df 4 次2019,有没有办法将其合并为一个?
    • 你能举一个输入和期望输出的例子吗?您希望如何合并这些重复项?
    • 它看起来像 2019 年的 4 行,其中四个新列中的每一列在 2019 年的一个中都有一个值,其他的是 NaN,我想将这 4x 2019 合并到一个中,没有NaN 值
    【解决方案2】:
    df_list=[jpn,svk,aut]
    

    通过concat()merge()

    merger=pd.concat((swe.merge(x,on='year',how='outer') for x in df_list))
    

    注意:我认为单独使用 concat() 会为您提供所需的输出,但如果您没有得到,请尝试使用 concat()merge()

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多