我有一个看起来像这样的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()
并进行了搜索,但是我很难实现。
谢谢!
答案 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