合并数据框 Pandas
Merging Data Frames with Pandas
我正在尝试将某些数据框合并为一个数据框并使用 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 应用程序,但 none 给出了我想要的输出。我仍在学习 pandas,所以我想我遗漏了一些东西,因为这并不觉得它应该太复杂。将不胜感激对这些步骤的简短解释(或 link 对优秀来源的解释)。
尝试 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
或者您可以使用 concat
和 groupby
:
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
我正在尝试将某些数据框合并为一个数据框并使用 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 应用程序,但 none 给出了我想要的输出。我仍在学习 pandas,所以我想我遗漏了一些东西,因为这并不觉得它应该太复杂。将不胜感激对这些步骤的简短解释(或 link 对优秀来源的解释)。
尝试 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
或者您可以使用 concat
和 groupby
:
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