python - pandas 合并中聚合映射值

标签 python pandas join aggregate pandas-groupby

我有一个 pandas 数据框:

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

其中聚合(在本例中为总和)是对从键 a、b 映射的值 c 进行的。

最佳答案

我的想法是首先在 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

关于python - pandas 合并中聚合映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59005300/

相关文章:

python - 通过存储索引提高 Pandas 过滤速度?

python - pd.Series.cat.as_ordered() 在 Pandas 中做什么?

join - Cassandra 非规范化数据模型

python - 如何在 Pandas 数据框中执行字符串的左、右和中间

python - Pandas - 在一列中显示值的百分比,按另一列分组

python - 类型错误 : expected string or bytes-like object

mysql - 如何连接表以选择连接表中的最大行?

mysql - 如何在mysql中将2个表合并为1个表?

javascript - Django View 未从 Angularjs $http 请求接收数据

Python xmlrpclib.使用 NetDNA 的 API 时出现故障