在组内联合非集迭代的有效方法

Bri*_*ian 3 python group-by pandas

我有这个 df

df = pd.DataFrame(dict(
        A=['b', 'a', 'b', 'c', 'a', 'c', 'a', 'c', 'a', 'a'],
        B=[[0, 2, 3, 1],
           [9, 6, 7, 2],
           [6, 0, 1, 4],
           [9, 2, 5, 1],
           [5, 1, 4, 8],
           [8, 5, 6, 6],
           [0, 9, 0, 0],
           [2, 6, 1, 8],
           [7, 3, 2, 6],
           [8, 7, 1, 9]]
        ))
Run Code Online (Sandbox Code Playgroud)

我想分组'A'并联合所有列表'B'

既不工作df.groupby('A').B.union()也不df.groupby('A').B.apply(set.union)工作.

我想要结果

A
a    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b                {0, 1, 2, 3, 4, 6}
c                {1, 2, 5, 6, 8, 9}
Name: B, dtype: object
Run Code Online (Sandbox Code Playgroud)

max*_*moo 5

问题是您需要在应用联合之前首先将它们作为集转换.一种解决方案是使用sum连接组,然后使用转换为setmap

In [28]: df.groupby('A').B.sum().map(set)
Out[28]:
A
a    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b                {0, 1, 2, 3, 4, 6}
c                {1, 2, 5, 6, 8, 9}
dtype: object
Run Code Online (Sandbox Code Playgroud)

  • 第二个"地图"是否必要?没有它,对我来说很好. (5认同)