【问题标题】:Filling NA s when using pd.merge使用 pd.merge 时填充 NA
【发布时间】:2020-02-29 10:47:18
【问题描述】:

我有两个数据框,我想将它们合并到常见的列上,如下所示。第二个数据框中还有一个新列。

dummy_data1 = {'id': ['1', '2', '3', '4'],'name': ['A', 'C', 'E', 'G'],
           'year':['2012','2012','2012','2012']}

df1 = pd.DataFrame(dummy_data1, columns = ['id', 'name', 'year'])

dummy_data2 = {
    'id': ['1', '2', '3', '7',],
    'name': ['A', 'C', 'E', 'P'],
    'ADDRESS': ['X', 'Y', 'Z', 'P'],'year':['2013','2013','2013','2013']}

df2 = pd.DataFrame(dummy_data2, columns = ['id', 'name','ADDRESS','year'])

当我用

合并这两个数据框时
df_merge = pd.merge(df1, df2, on=['name','id','year'],how='outer')

由于新添加的列,我得到了一些行的 NaN ,正如预期的那样:

enter image description here

我的问题是关于 NaN 的,如果该 id 的数据在其他数据框中可用,是否有办法只重复 NaN 的数据。因此,对于索引 0,它会带来“X”而不是 NaN,对于索引 1,它会带来“Y”等等。我只是想假设不同年份的“地址”不会改变。 谢谢!

【问题讨论】:

  • 请展示您希望其外观的示例。

标签: python-3.x pandas


【解决方案1】:

我建议pandas merge ordered 并使用backward fill

合并已排序数据的有序作品;因此,我建议在使用它对数据进行排序之前。在你的情况下,它已经是。

pd.merge_ordered(df1,df2).bfill()

    id  name    year    ADDRESS
0   1   A   2012         X
1   1   A   2013         X
2   2   C   2012         Y
3   2   C   2013         Y
4   3   E   2012         Z
5   3   E   2013         Z
6   4   G   2012         P
7   7   P   2013         P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多