python - 如何在特定情况下组合数据框?

标签 python pandas dataframe merge pandas-groupby

我有两个数据框,如下所示。

enter image description here

我想按照以下规则组合这两个数据帧。 首先,我想重点关注 A、B、C 和 D 列。 如果两个数据帧中的这些值都相同,我想计算该值的总和。另外,对于 E 列,我想保留 df1 值。 预期结果如下图。

enter image description here

如果您能提供帮助,我将非常感激。 非常感谢您的帮助。

最佳答案

concat + groupby + sort_values

一种方法是连接数据帧,执行 groupby 操作,然后对值进行排序:

df1 = pd.DataFrame([[100, 'aaa', 'bbb', 'ccc', 'ddd', 1],
                    [50, 'eee', 'fff', 'ggg', 'hhh', 2],
                    [10, 'iii', 'jjj', 'kkk', 'lll', 3]],
                   columns=['Value', 'A', 'B', 'C', 'D', 'E'])

df2 = pd.DataFrame([[80, 'aaa', 'bbb', 'ccc', 'ddd', 4],
                    [60, 'ej', 'feuajo', 'eiwo', 'fuasdhf', 5],
                    [1, 'gheuha', 'daj;f', 'dfua', 'hfdusu', 6]],
                   columns=['Value', 'A', 'B', 'C', 'D', 'E'])

res = pd.concat([df1, df2], axis=0, ignore_index=True)\
        .groupby(['A', 'B', 'C', 'D'])\
        .agg({'Value': 'sum', 'E': 'first'})\
        .reset_index()\
        .sort_values('Value', ascending=False)

print(res)

        A       B     C        D  Value  E
0     aaa     bbb   ccc      ddd    180  1
2      ej  feuajo  eiwo  fuasdhf     60  5
1     eee     fff   ggg      hhh     50  2
4     iii     jjj   kkk      lll     10  3
3  gheuha   daj;f  dfua   hfdusu      1  6

关于python - 如何在特定情况下组合数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50731253/

相关文章:

仅在 Pandas 中转换为年份的 Python 清理日期

python - ZeroMQ 轮询器 vs Tornados EventLoop

python - 当一个变量的值已知时,在 numpy 中解决超定系统

python - 高效简洁的GroupBy扰列透传

python - 如何在 seaborn lmplot 上添加标题?

python - 如何在pandas的单个数据列中应用set和ignorecase

python - Pandas 转出独特的专栏

python - 如何在 python 中使用 pdf2image 将 pdf 从 url 转换为图像?

python - 如何清理此数据类型对象并将其转换为保持 Null 和 NaN 的 float 类型

python - 按 ID 和周数计算单列中的滚动变化