在 Pandas Dataframe 上按分组并使用 APPLY 和 MAX 操作 [重复]
Posted
技术标签:
【中文标题】在 Pandas Dataframe 上按分组并使用 APPLY 和 MAX 操作 [重复]【英文标题】:Group by and use APPLY and MAX operations on Pandas Dataframe [duplicate] 【发布时间】:2020-03-03 11:23:18 【问题描述】:我有示例熊猫数据框
sample_df = pd.DataFrame(
'visitor_id' : ['MM1', 'MM1', 'MM1', 'MM2', 'MM2', 'MM2', 'MM4', 'MM4','MM4'],
'pagename' : ['S1', 'S1', 'S3', 'S3', 'S4', 'S4', 'S2', 'S2', 'S2'],
'order_status' : ['accept', 'accept', 'accept', 'reject', 'reject', 'reject', 'reject', 'reject', 'reject'],
)
visitor_id pagename order_status
MM1 S1 accept
MM1 S1 accept
MM1 S3 accept
MM2 S3 reject
MM2 S4 reject
MM2 S4 reject
MM4 S2 reject
MM4 S2 reject
MM4 S2 reject
我正在尝试根据每个 visitor_id 的页面名称汇总旅程。我有这段代码来构建旅程 -
sample_journeys = sample_df.groupby(['visitor_id']) \
.apply(lambda x: ','.join(x.pagename)) \
.reset_index()
sample_journeys.columns = ['visitor_id', 'page_paths']
输出为
visitor_id page_paths
0 MM1 S1,S1,S3
1 MM2 S3,S4,S4
2 MM4 S2,S2,S2
我还想在我的聚合操作中为每个 visitor_id 取一个 max
或 order_status
列。所以输出应该有 3 列 -
visitor_id page_paths max_order_status
MM1 S1,S1,S3 accept
MM2 S3,S4,S4 reject
MM4 S2,S2,S2 reject
如何在 Pandas 中执行 1 次聚合?
我尝试了类似的东西
sample_journeys = sample_df.groupby(['visitor_id']) \
.apply(lambda x: ','.join(x.pagename)) \
.agg('order_status': ['max']) \
.reset_index()
但它因一些错误而失败 - unexpected character after line continuation character
我还想在聚合后将列名的最终数据框重命名为[visitor_id, page_paths, max_order_status]
,我觉得这很困难。
【问题讨论】:
【参考方案1】:用途:
new_df=( sample_df.groupby('visitor_id',sort=False)
.agg(page_paths=('pagename',lambda x: ','.join(x)),
max_order_status=('order_status','max'))
.reset_index() )
print(new_df)
输出
visitor_id page_paths max_order_status
0 MM1 S1,S1,S3 accept
1 MM2 S3,S4,S4 reject
2 MM4 S2,S2,S2 reject
【讨论】:
当我使用它时,列名出现在 2 行中。然后,当我将您的代码更改为sample_df.groupby('visitor_id').agg(page_paths=('pagename',lambda x: ','.join(x)),max_order_status=('order_status','max')).reset_index()
它适用于 1 行中的所有列名
这是您的预期出发吗?你能用我的代码展示你得到什么吗? :)
没关系,我没看到你的代码有reset_index()
。感谢您的回答,它就像一个魅力。 reset_index() 有什么作用?
我后来添加了reset_index
。 reset_index
重置索引。当前索引变成一列而新的索引是0,1,2……你可以在这里看到:pandas.pydata.org/pandas-docs/stable/reference/api/…以上是关于在 Pandas Dataframe 上按分组并使用 APPLY 和 MAX 操作 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组len函数和nunique函数计算分组的个数(分组包含多个dataframe)
Python,Pandas Dataframe 在分组后取回索引
pandas 有两个dataframe ,求各个分组之间的相除后的均值
pandas使用groupby函数基于指定分组变量对dataframe数据进行分组使用groups属性获取每个分组的样本对应的在原dataframe中的行索引位置列表