【问题标题】:Confusion regarding Merge in Pandas关于 Pandas 合并的困惑
【发布时间】:2013-04-08 04:21:36
【问题描述】:

我正在尝试合并两个没有索引的熊猫数据框:

In [127]: df1
Out[127]: 
   value1        date id    value2    group
0 -0.2284  2012-04-01  a -0.067469  group d
1 -0.4875  2012-04-01  b -0.021274  group d
2  0.1139  2012-04-01  c -0.015978  group d
3  0.3191  2012-04-01  d  0.022634  group d
4 -0.0077  2012-04-01  e  0.000000  group d

In [128]: df2
Out[128]: 
             date id      value2    group
23044  2012-04-01  a -0.06701001  group c
23045  2012-04-01  b    -0.02128  group c
23046  2012-04-01  c           0  group c
23047  2012-04-01  d           0  group c
23048  2012-04-01  e           0  group c

In [129]: pd.merge(df1, df2, how = 'outer', on = ['date', 'id', 'value2', 'group'])
Out[129]: 
   value1        date id    value2    group
0 -0.2284  2012-04-01  a -0.067469  group d
1 -0.4875  2012-04-01  b -0.021274  group d
2  0.1139  2012-04-01  c -0.015978  group d
3  0.3191  2012-04-01  d  0.022634  group d
4 -0.0077  2012-04-01  e  0.000000  group d
5     NaN  2012-04-01  a -0.067010  group c
6     NaN  2012-04-01  b -0.021280  group c
7     NaN  2012-04-01  c  0.000000  group c
8     NaN  2012-04-01  d  0.000000  group c
9     NaN  2012-04-01  e  0.000000  group c

这几乎是所需的输出,除了我希望根据日期和 id 由组 d 中的 value1 填充 c 组的 value1 的 NaN。实现这一目标的正确方法是什么?

【问题讨论】:

    标签: merge pandas


    【解决方案1】:

    我认为这不可避免地需要两个步骤。

    要“填写”value1,您需要关联具有相同(日期、id)的所有行,而不管组或值如何。

    In [5]: df3 = df2.set_index(['date', 'id']).join(
      ....:     df1.set_index(['date', 'id'])['value1']).reset_index()
    

    要获得最终结果,您将按所有属性列出可区分的行,不再将组和值混为一谈。

    In [6]: pd.merge(df1, df3, how = 'outer', 
      ....:     on = ['date', 'id', 'value1', 'value2', 'group'])
    Out[6]: 
       value1        date id    value2    group
    0 -0.2284  2012-04-01  a -0.067469  group_d
    1 -0.4875  2012-04-01  b -0.021274  group_d
    2  0.1139  2012-04-01  c -0.015978  group_d
    3  0.3191  2012-04-01  d  0.022634  group_d
    4 -0.0077  2012-04-01  e  0.000000  group_d
    5 -0.2284  2012-04-01  a -0.067010  group_c
    6 -0.4875  2012-04-01  b -0.021280  group_c
    7  0.1139  2012-04-01  c  0.000000  group_c
    8  0.3191  2012-04-01  d  0.000000  group_c
    9 -0.0077  2012-04-01  e  0.000000  group_c
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 2019-05-12
      • 1970-01-01
      • 2019-05-17
      • 2020-03-06
      • 2016-03-16
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多