熊猫:groupby列,将列表的行合并到group的单个列中?

时间:2019-09-18 19:59:52

标签: python pandas pandas-groupby

我有一个看起来像这样的Pandas数据框:

import pandas as pd

f1 = [['abc', 'def'], ['ghi', 'jkl'], ['mno', 'pqr'], ['stu', 'vwx'], ['yz', 'xx'], ['yx', 'zx'], ['text', 'more'], ['stuff', 'here'], ['last', 'one']]

f2 = ['1', '1', '1', '2', '2', '2', '3', '3', '3']

groups = ['GROUP A', 'GROUP A', 'GROUP A', 'GROUP B', 'GROUP B', 'GROUP B', 'GROUP C', 'GROUP C', 'GROUP C']


df = pd.DataFrame({'Groups': groups, 'Feature 1': f1, 'Feature 2': f2})
df


# DataFrame print:
    Groups    Feature 1   Feature 2
0   GROUP A   [abc, def]      1
1   GROUP A   [ghi, jkl]      1
2   GROUP A   [mno, pqr]      1
3   GROUP B   [stu, vwx]      2
4   GROUP B   [yz, xx]    2
5   GROUP B   [yx, zx]    2
6   GROUP C   [text, more]    3
7   GROUP C   [stuff, here]   3
8   GROUP C   [last, one]     3

我正在尝试按“分组”列对数据进行分组,以便可以生成如下所示的数据框:

Groups      Feature 1                                Feature 2
GROUP A     [abc, def, ghi, jkl, mno, pqr]           1
GROUP B     [stu, vwx, yz, xx, yx, zx]               2
GROUP C     [text, more, stuff, here, last, one]     3

换句话说,我的群组在“群组”列中重复,每个重复对应于属于该群组的单个列表。

我想消除“组”列中各组的多次重复,并将与每个组关联的所有单个列表合并为一个包含单个行中所有元素的合并列表。

我已经尝试过groupby()并进行了搜索,但是我很难实现。

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以GroupBy并在包含列表的列上进行汇总,并用sum将组中的列表连接起来,并在Feature 2上使用first进行汇总:

df.groupby('Groups').agg({'Feature 1':'sum', 'Feature 2':'first'}).reset_index()

   Groups                        Feature 1          Feature 2
0  GROUP A        [abc, def, ghi, jkl, mno, pqr]         1
1  GROUP B            [stu, vwx, yz, xx, yx, zx]         2
2  GROUP C  [text, more, stuff, here, last, one]         3
​