首页 > 解决方案 > Pandas Dataframe Groupby 加入字符串,同时保留字符串的顺序

问题描述

已经提出了类似的问题,即使用 Pandas groupby 连接多行中的字符串并从逗号分隔的单元格中删除重复项

我想在 pandas groupby lambda 函数中连接字符串值,但是在保持字符串顺序的同时,解决方案使用在set传入多个值时不保留顺序的函数。

df = df.sort_values(
        ['id', 'order_column']
    ).groupby('id').agg(
        {
            'channel': lambda x: ' > '.join(set(x)),
            'value': np.sum
        }
    )

如何在保持传递给序列的值顺序的同时做到这一点?在我的例子中,数据是

1             Email
2         Affiliate
3    Organic Search
4             Email
5    Branded Social
6            Direct
7    Branded Social
8            Direct
9    Branded Social
10            Email
11        Affiliate
12            Email
13           Direct
14            Email
15           Direct
16            Email
17   Branded Social
18           Direct
19   Branded Social

我得到什么:'Affiliate > Email > Organic Search > Branded Social > Direct'

我的期望'Email > Affiliate > Organic Search > Branded Social > Direct'

标签: pythonpandasstringlambdapandas-groupby

解决方案


在and中使用sort=False参数:groupbydrop_duplicatesset

df = df.sort_values(
        ['id', 'order_column']
    ).groupby('id', sort=False).agg(
        {
            'channel': lambda x: ' > '.join(x.drop_duplicates()),
            'value': np.sum
        }
    )

推荐阅读