【问题标题】:How to compare dataframes with the same size but different information如何比较大小相同但信息不同的数据帧
【发布时间】:2022-11-20 04:08:04
【问题描述】:

我有两个数据框,其中每一行是一个产品,每一列是不同的月份,它们总是具有相同的大小并且是这样的:

data1 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [1, 2, 3, 4],
    "2022-02": [1, 2, 3, 4],
    "2022-03": [1, 2, 3, 4]
}

data2 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [13, "None", 15, 16],
    "2022-02": [17, 18, "None", 20],
    "2022-03": ["None", 22, 23, "None"]
}               

它们之间的区别在于第二个有时可以包含 None 值。我想首先用交错数据创建第三个数据帧,就像这样(标志将表明它已被插入):

data3 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [1, 2, 3, 4],
    "2022-01 - flag": [13, "None", 15, 16],
    "2022-02": [5, 6, 7, 8],
    "2022-02 - flag": [17, 18, "None", 20],
    "2022-03": [9, 10, 11, 12]
    "2022-03 - flag": ["None", 22, 23, "None"]
}   

还有另一个数据框,我将把 data2 中的 None 值放入 data1 中。基本上我认为我需要根据日期迭代数据框 1 和 2 的列(因为它们具有相同的产品),但我不知道如何正确地做到这一点。最终的数据框看起来像这样:

data4 = {
    "product": ['A', "B", "C", "D"],
    "2022-01": [1, "None", 3, 4],
    "2022-02": [5, 6, "None", 8],
    "2022-03": ["None", 10, 11, "None"]
}

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以使用 pandas.DataFrame.mask 直接获取您要查找的输出:

    df1= pd.DataFrame(data1)
    df2= pd.DataFrame(data2)
    
    out = df1.mask(df2.replace("None", None).isna())
    

    # 输出 :

    print(out)
    
      product  2022-01  2022-02  2022-03
    0       A      1.0      5.0      NaN
    1       B      NaN      6.0     10.0
    2       C      3.0      NaN     11.0
    3       D      4.0      8.0      NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 2021-10-03
      相关资源
      最近更新 更多