【问题标题】:Pandas dataframe merge熊猫数据框合并
【发布时间】:2013-09-26 04:56:11
【问题描述】:

我有一个来自 4 个数据帧的串联 pandas 数据帧,如下所示:

In [121]: all
Out[121]:
       E  H  N  S
   102P    Y  NaN  NaN  NaN
   103R    Y  NaN  NaN  NaN
   102P  NaN  NaN    Y  NaN
   103R  NaN  NaN    Y  NaN
   109F  NaN  NaN    Y  NaN
   103R  NaN    Y  NaN  NaN
   109F  NaN    Y  NaN  NaN
   102P  NaN  NaN  NaN    Y
   103R  NaN  NaN  NaN    Y
   109F  NaN  NaN  NaN    Y

我想把它合并成这样的数据框:

        E   H   N   S
  102P  Y  NAN  Y   Y
  103R  Y   Y   Y   Y
  109F NAN  Y   Y   Y

如何根据 all.index 合并它们?

【问题讨论】:

    标签: python merge pandas dataframe


    【解决方案1】:

    在索引上执行groupby(我从您发布的数据中推测值102P... 在索引中)。并计算值。这将返回一个带有 0 和 1 的 DataFrame。只需将它们替换为适当的值即可。

    >>> ndf = df.groupby(level=0).count()
    >>> ndf[ndf == 1] = 'Y'
    >>> ndf[ndf == 0] = np.nan
    >>> ndf
             E    H  N  S
    label                
    102P     Y  NaN  Y  Y
    103R     Y    Y  Y  Y
    109F   NaN    Y  Y  Y
    

    如果您有重复,那么只需将条件从 ndf[ndf == 1] 更改为 ndf[ndf > 0]

    但是为什么要连接数据帧而不是组合它们呢?示例:

    >>> df1
          E   H   N   S
    0                  
    102P  Y NaN NaN NaN
    103R  Y NaN NaN NaN
    >>> df2
           E   H  N   S
    0                  
    102P NaN NaN  Y NaN
    103R NaN NaN  Y NaN
    109F NaN NaN  Y NaN
    
    ...
    
    >>> reduce(lambda first, second: first.combine_first(second),
               [df1, df2, df3, df4], pd.DataFrame())
            E    H  N  S
    0                   
    102P    Y  NaN  Y  Y
    103R    Y    Y  Y  Y
    109F  NaN    Y  Y  Y
    

    【讨论】:

    • pd.merge 一次只需要两个数据帧,我最终得到了两组合并的 df,我将它们合并以获得最终的 df。这是正确的方法还是我错过了什么?
    • @UNagaswamy 更新了答案,添加了示例。很抱歉误导了你,我说合并的时候不够清楚:(我不是在考虑merge函数,而是作为一个通用术语的合并......
    • 你可以使用嵌套合并。
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2017-06-11
    • 2016-01-01
    • 2016-10-31
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多