使用 apply() 函数在 pandas 中的 groupby 之后创建列表
Posted
技术标签:
【中文标题】使用 apply() 函数在 pandas 中的 groupby 之后创建列表【英文标题】:Make list after groupby in pandas using apply() function 【发布时间】:2022-01-01 12:56:33 【问题描述】:我有这个数据框:
c1 c2
0 B 1
1 A 2
2 B 5
3 A 3
4 A 7
我的目标是继续跟踪 column2 中的值,根据 column1 中用 (:) 分隔的字母,输出应如下所示:
c1 list
0 A 2:3:7
1 B 1:5
最pythonic的方法是什么:
目前我可以按第 1 列进行分组,我正在尝试使用 apply() 函数,但我不知道如何在新列中映射和制作此列表。
【问题讨论】:
【参考方案1】:您可以使用groupby
>>> import pandas as pd
>>> df = pd.DataFrame('c1': ['B', 'A', 'B', 'A', 'A'], 'c2': [1, 2, 5, 3, 7])
>>>
>>> df.c2 = df.c2.astype(str)
>>> new_df = df.groupby("c1")['c2'].apply(":".join).reset_index()
>>> new_df
c1 c2
0 A 2:3:7
1 B 1:5
【讨论】:
【参考方案2】:我认为你可以只做一个字符串连接
df = pandas.DataFrame("c1":list("BABAA"),"c2":[1,2,5,3,7])
df['c2'] = df['c2'].astype(str)
df.groupby('c1').agg('c2':':'.join)
您可能会获得更多里程
df.groupby('c1').agg('c2':list)
【讨论】:
【参考方案3】:试试这个:
df = df.groupby("c1")["c2"].apply(lambda x: ":".join([str(i) for i in x])).reset_index()
【讨论】:
你可以把它缩短为df.c2.astype(str).groupby(df.c1).apply(":".join).reset_index()
以上是关于使用 apply() 函数在 pandas 中的 groupby 之后创建列表的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用apply函数:在dataframe数据列(column)上施加(apply)函数
pandas使用apply函数:在dataframe数据行(row)上施加(apply)函数
在Pandas中使用Apply Lambda函数具有多个if语句