【问题标题】:Combining rows of two Dataframes组合两个数据框的行
【发布时间】:2021-07-30 23:52:31
【问题描述】:

我一直在查看 the documentationPandas Merging 101,但找不到帮助。

假设我有如下两个数据框

>>> df

    Values  Count  Percentage
0    Apple      0           0
1   Banana      0           0
2  Samsung      0           0
3   Orange      0           0
>>> df2

    Values  Count  Percentage
0    Apple     14        0.74
1  Samsung      5        0.26

我想合并两个 Dataframe 以产生以下结果

>>> result

    Values  Count  Percentage
0    Apple     14        0.74
1   Banana      0           0
2  Samsung      5        0.26
3   Orange      0           0

请记住,df2 始终是df 的子集。
换句话说,df2 中的每个 Values 都将保证出现在 dfValues 中。

这是我目前所拥有的

result = df.merge(df2, on='Values', how='left')
>>> result

    Values  Count_x  Percentage_x  Count_y  Percentage_y
0    Apple        0             0     14.0          0.74
1   Banana        0             0      NaN           NaN
2  Samsung        0             0      5.0          0.26
3   Orange        0             0      NaN           NaN

但结果有点令人失望。
任何帮助将不胜感激。

【问题讨论】:

标签: python pandas dataframe merge


【解决方案1】:

或者您可以使用update。设置索引后,只需将 df1 中的值更新为新值即可:

df1 = df1.set_index('Values')
df1 = df1.update(df2.set_index('Values')).reset_index()

【讨论】:

    【解决方案2】:

    我认为你想要的是 pd.concat 后跟 .drop_duplicates()

    >>> df1
        Values  Count  Percentage
    0    Apple      0           0
    1   Banana      0           0
    2  Samsung      0           0
    3   Orange      0           0
    >>> df2
        Values  Count  Percentage
    0    Apple     14        0.74
    1  Samsung      5        0.26
    >>> pd.concat([df1, df2]).drop_duplicates(subset='Values', keep='last')
        Values  Count  Percentage
    1   Banana      0        0.00
    3   Orange      0        0.00
    0    Apple     14        0.74
    1  Samsung      5        0.26
    

    【讨论】:

      【解决方案3】:

      你应该:

      • df中的索引设置为Values并保存结果 在临时 DataFrame 中,
      • 使用 df2 更新它,并将索引也设置为 Values更新就地执行),
      • 重置索引以将转换为常规列,
      • 或许可以将此结果保存在 df 下。

      代码如下:

      wrk = df.set_index('Values')
      wrk.update(df2.set_index('Values'))
      df = wrk.reset_index()
      

      结果是:

          Values  Count  Percentage
      0    Apple   14.0        0.74
      1   Banana    0.0        0.00
      2  Samsung    5.0        0.26
      3   Orange    0.0        0.00
      

      【讨论】:

        猜你喜欢
        • 2012-10-02
        • 2022-01-20
        • 1970-01-01
        • 2017-05-27
        • 2019-04-28
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2021-03-22
        相关资源
        最近更新 更多