【问题标题】:Aggregate mapped values in pandas merge在熊猫合并中聚合映射值
【发布时间】:2020-03-19 04:17:18
【问题描述】:

我有一个熊猫数据框:

import pandas as pd
df = pd.DataFrame({"a": [["x","y"]], "b": [2]})
df2= pd.DataFrame({"a": ["x","y"], "b":[2,2], "c": [3,4]})

其中df.a 有列表条目:

    a           b   
0   ["x","y"]   2

df2 将这些列表元素(以及其他列的条目)映射到列 c:

    a       b   c
0   "x"     2   3
1   "y"     2   4

我想离开加入df, df2,这样我最终得到:

    a           b   c
0   ["x","y"]   2   7

聚合(在本例中为 sum)是跨从键 a、b 映射的值 c 进行的。

【问题讨论】:

  • 去做吧:df['c'] = sum(df2['c'])
  • 加入后不需要聚合

标签: python pandas join aggregate pandas-groupby


【解决方案1】:

我的想法是首先在 df1 中创建一个唯一键,以便它保留 a 列中列表的分组,允许您在 pandas > 0.25 中使用 df.explode。我还添加了一行来测试它是如何工作的:

df1['key'] = (df1.a != df1.a.shift()).cumsum()
df1 = df1.explode('a')
df = df1.merge(df2)
df = df.groupby('key').agg({'a': list, 'b': 'first', 'c': sum}).reset_index(drop=True)

print(df)
        a  b   c
0  [x, y]  2   7
1     [z]  3  10

【讨论】:

  • 谢谢!与 df1['key']=df1.index 一起使用,因为列 a 不是唯一的。
猜你喜欢
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
  • 2017-04-17
  • 2020-07-05
  • 2015-01-03
  • 2021-06-21
  • 2017-01-14
相关资源
最近更新 更多