【问题标题】:How to merge two columns in a pandas dataframe, both containing years but different years?如何合并 pandas 数据框中的两列,它们都包含年份但年份不同?
【发布时间】:2023-01-01 23:00:42
【问题描述】:

我有一个类似于此的熊猫数据框:

Fruits  Year    Farm A  Year    Farm B
Apples  2021    2000    2022    2200
Apples  2020    1500    2021    2100
Apples  2019    1200    2019    1900

我想将此数据框转换为如下所示:

Fruits  Year    Farm A  Farm B
Apples  2022      -     2200
Apples  2021    2000    2100
Apples  2020    1500    1900
Apples  2019    1200     -

有什么帮助吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果您有两个数据框:

    Fruits  Year   FarmA
    Apples  2021    2000
    Apples  2020    1500
    Apples  2019    1200
    
    Fruits  Year   FarmB
    Apples  2022    2200
    Apples  2021    2100
    Apples  2019    1900
    

    例如,leftright,那么您可以按如下方式合并它们:

    out = pd.merge(left, right, on=["Fruits", "Year"], how="outer")
    

    看起来像:

       Fruits  Year   FarmA   FarmB
    0  Apples  2021  2000.0  2100.0
    1  Apples  2020  1500.0     NaN
    2  Apples  2019  1200.0  1900.0
    3  Apples  2022     NaN  2200.0
    

    你有两个数据帧已经加入Fruits,这很难处理。您可以获得两个单独的数据框,例如:

    left  = df[["Fruits", "Year1", "FarmA"]].rename(columns={"Year1": "Year"})
    right = df[["Fruits", "Year1", "FarmB"]].rename(columns={"Year2": "Year"})
    

    请注意,我稍微更改了原始 df 的列名称。 (重复“年”,“农场 X”中的空格)

    【讨论】:

      【解决方案2】:

      如果数据与原始结构相匹配,我们可以利用DataFrame.melt() 来逆透视我们的数据。虽然这与 OP 的最终输出不匹配,但此结构可用于执行其他操作,并且最好注意具有 NaN 值。

      import pandas as pd
      
      df = pd.DataFrame({"Fruits": ["Apple", "Apple", "Apple"],
       "Year": [2021, 2020, 2019],
       "Farm A": [2000, 1500, 1200],
       "Year": [2022, 2021, 2019],
       "Farm B": [2200, 2100, 1900]})
      
      df.melt(id_vars = ["Fruits", "Year"], var_name = "Farm", value_name = "Farm Output")
      
      ##    Fruits  Year    Farm  Farm Output
      ##  0  Apple  2022  Farm A         2000
      ##  1  Apple  2021  Farm A         1500
      ##  2  Apple  2019  Farm A         1200
      ##  3  Apple  2022  Farm B         2200
      ##  4  Apple  2021  Farm B         2100
      ##  5  Apple  2019  Farm B         1900
      

      【讨论】:

        猜你喜欢
        • 2021-09-13
        • 1970-01-01
        • 2021-01-20
        • 2020-02-12
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多