我有以下示例 df:
col1 col2 col3 doc_no
0 a x f 0
1 a x f 1
2 b x g 2
3 b y g 3
4 c x t 3
5 c y t 4
6 a x f 5
7 d x t 5
8 d x t 6
Run Code Online (Sandbox Code Playgroud)
我想按前 3 列 ( col1
, col2
, col3
) 进行分组,根据前 3 列的分组将第四列 ( doc_no
) 连接成一行字符串,并生成 3 列分组的排序计数列 ( count
)。下面是所需的输出示例(列顺序无关紧要):
col1 col2 col3 count doc_no
0 a x f 3 0, 1, 5
1 d x t 2 5, 6
2 b x g 1 2
3 b y g 1 3
4 c x t 1 3
5 c y t 1 4
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我使用下面的行来获取分组和计数:
grouped_df = df.groupby(['col1','col2','col3']).size().reset_index(name='count')\
.sort_values(['count'], ascending=False).reset_index()
Run Code Online (Sandbox Code Playgroud)
但我不确定如何doc_no
在同一代码行中获取连接列。
cs9*_*s95 10
尝试groupby
并agg
喜欢这样:
(df.groupby(['col1', 'col2', 'col3'])['doc_no']
.agg(['count', ('doc_no', lambda x: ','.join(map(str, x)))])
.sort_values('count', ascending=False)
.reset_index())
col1 col2 col3 count doc_no
0 a x f 3 0,1,5
1 d x t 2 5,6
2 b x g 1 2
3 b y g 1 3
4 c x t 1 3
5 c y t 1 4
Run Code Online (Sandbox Code Playgroud)
agg
使用起来很简单,因为您可以指定要在单个列上运行的减速器列表。