在Pandas DataFrame中使用字典聚合

5

I have a DataFrame:

dat = pd.DataFrame({
    'key1' : [ 1,   1,   2,   2,   3,   3,   3,   3,   4,   4],
    'key2' : ['a', 'b', 'a', 'c', 'b', 'c', 'd', 'e', 'c', 'e'],
    'value' : [1,   2,   3,   4,   5,   6,   7,   8,   9,   10]
})

我可以使用`list`函数来聚合这些列:参考链接
dat.groupby('key1')['key2'].apply(list)
## key1
## 1          [a, b]
## 2          [a, c]
## 3    [b, c, d, e]
## 4          [c, e]
## Name: key2, dtype: object

如果我想要按key1进行分组并获得聚合,每行都是一个dict{ key2 : value }对,该怎么办? 我期望的输出结果是:
## key1
## 1          {a : 1, b : 2}
## 2          {a : 3, c : 4}
## 3    {b : 5, c : 6, d : 7, e : 8}
## 4          {c : 9, e : 10}

在pandas中如何实现这个目标?
一种解决方案是使用上面的函数创建两个列表,然后将它们合并为dict,但也许有更好的解决方案?

1
你期望的输出是什么? - cs95
1
你是否在寻找类似这样的内容?df.groupby('key1')['key2', 'value'].apply(lambda x: dict(x.values)) - cs95
@coldspeed,我已经更新了。是的,这就是我要找的! - Tim
1个回答

2

根据您的更新,您正在寻找 groupby + apply

df.groupby('key1')['key2', 'value'].apply(lambda x: dict(x.values))

key1
1                    {'a': 1, 'b': 2}
2                    {'a': 3, 'c': 4}
3    {'b': 5, 'c': 6, 'd': 7, 'e': 8}
4                   {'c': 9, 'e': 10}
dtype: object

谢谢!您能否评论一下为什么.apply(lambda x : dict(x))不起作用?我试图逐步实现您的解决方案,但错误阻止了我自己找到它... - Tim
@Tim .apply(lambda x : x) 就像是说 1=1,它什么也不做——输出与输入完全相同。你需要以某种方式对其进行聚合,这就是 dict 在其中的作用。 - cs95
1
很难想到一个替代方案。 - Bharath M Shetty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接