首页 > 解决方案 > 如何在 Pyhton 中将两组数据与 Pandas 合并而不丢失行?

问题描述

我在 Python 中使用 Pandas 来比较两个数据框。我想将一组数据匹配到另一组。

数据框 1

姓名
山姆
麦克风
约翰
马修
标记

数据框 2

姓名 数字
麦克风 76
约翰 92
标记 32

这是我想得到的输出:

姓名 数字
山姆 0
麦克风 76
约翰 92
马修 0
标记 32

目前我正在这样做

df1 = pd.read_csv('data_frame1.csv', usecols=['Name', 'Number'])
df2 = pd.read_csv('data_frame2.csv')
df3 = pd.merge(df1, df2, on = 'Name')
df3.set_index('Name', inplace = True)
df3.to_csv('output.csv')

但是,这是删除没有数字的名称。我想保留它们并为它们分配 0。

标签: pythonpandasdataframe

解决方案


您可以使用pd.merge(..., , how = 'outer')它保留所有行并为它们插入,Nan然后使用.fillna(0)并插入:0Nan

>>> pd.merge(df1, df2, on = 'Name', how = 'outer').fillna(0)

    Name      Number
0   Sam       0
1   Mike      76
2   John      92
3   Matthew   0
4   Mark      32

pd.merge(..., , how = 'outer')如果您想将一个 DataFrame 与另一个 DataFrame 合并,请考虑两个 DataFrame,如下所示,请参见此示例:

>>> df1 = pd.DataFrame({'Name': ['Mike','John','Mark','Matthew']})
>>> df2 = pd.DataFrame({'Name': ['Mike','John','Mark', 'Sara'], 'Number' : [76,92,32,50]})

>>> pd.merge(df1, df2, on='Name', how='outer').fillna(0)
    Name    Number
0   Mike     76.0
1   John     92.0
2   Mark     32.0
3   Matthew  0.0
4   Sara     50.0

>>> df1.merge(df2,on='Name', how='left').fillna(0)
    Name     Number
0   Mike     76.0
1   John     92.0
2   Mark     32.0
3   Matthew  0.0

推荐阅读