【问题标题】:Merging Data Frames with Pandas将数据框与 Pandas 合并
【发布时间】:2021-12-14 17:10:12
【问题描述】:

我正在尝试将某些数据帧合并到一个数据帧中,并使用 pandas 填充缺失的值。一个例子如下:

import pandas as pd

data1 = {'SKU' : ['C1', 'D1'],
     'Description' : ['c2', 'd'],
     'Unit Cost' : [0.2, 1.5],
     'Qty1' : [18, 10]}
idx1 = ['RM0001', 'RM0004']

data2 = {'SKU' : ['C1', np.nan],
     'Description' : ['c', 'e'],
     'Qty2' : [15, 8]}
idx2 = ['RM0001', 'RM0010']

data3 = {'SKU' : ['D1', 'E1'],
     'Description' : ['d', 'e'],
     'Qty3' : [7, 9]}
idx3 = ['RM0004', 'RM0010']

df1 = pd.DataFrame(data1, index=idx1)
df2 = pd.DataFrame(data2, index=idx2)
df3 = pd.DataFrame(data3, index=idx3)

所需的输出将是以下形式:

       SKU Description  Unit Cost  Qty1  Qty2  Qty3
RM0001  C1           c        0.2  18.0  15.0   NaN
RM0004  D1           d        1.5  10.0   NaN   7.0
RM0010  E1           e        NaN   NaN   8.0   9.0

我尝试了各种 pd.merge 和 functools.reduce 应用程序,但都没有给我想要的输出。我还在学习熊猫,所以我想我错过了一些东西,因为这感觉不应该太复杂。将不胜感激对这些步骤(或指向优秀来源的链接)的小解释。

【问题讨论】:

    标签: python pandas dataframe join merge


    【解决方案1】:

    试试combine_first,你可以把它们链接起来:

    df1.combine_first(df2).combine_first(df3)
    

    输出:

           Description  Qty1  Qty2  Qty3 SKU  Unit Cost
    RM0001          c2  18.0  15.0   NaN  C1        0.2
    RM0004           d  10.0   NaN   7.0  D1        1.5
    RM0010           e   NaN   8.0   9.0  E1        NaN
    

    或者你可以使用concatgroupby

    pd.concat([df1,df2,df3]).groupby(level=0).first()
    

    输出:

           SKU Description  Unit Cost  Qty1  Qty2  Qty3
    RM0001  C1          c2        0.2  18.0  15.0   NaN
    RM0004  D1           d        1.5  10.0   NaN   7.0
    RM0010  E1           e        NaN   NaN   8.0   9.0
    

    【讨论】:

    • 谢谢,我不知道 combine_first。现在深入研究文档。但是,您的输出似乎略有偏差,因为 c2 应该是 c。
    • @Matt c 来自df2,其中df1 具有c2。您可能想要颠倒顺序,例如df3.combine_first(df2).combine_first(df1) 或在concat 方法中使用.last()
    • 谢谢!完美运行。澄清一下,groupby 中的 level=0 参数是做什么的?
    • level=0 将具有相同索引(在级别 0)的行分组。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2018-01-31
    • 2017-06-27
    • 2017-01-21
    • 2019-06-25
    • 2017-03-27
    相关资源
    最近更新 更多