如何通过另一列的值 pandas 聚合 groupBy [重复]
Posted
技术标签:
【中文标题】如何通过另一列的值 pandas 聚合 groupBy [重复]【英文标题】:How to aggregate groupBy by another column's value pandas [duplicate] 【发布时间】:2020-02-05 05:08:00 【问题描述】:我有一个这样的 DataFrame。
order_id product_id add_to_cart_order reordered user_id eval_set order_number order_dow order_hour_of_day days_since_prior_order
0 1 49302 1 1 112108 train 4 4 10 9.0
1 1 11109 2 1 112108 train 4 4 10 9.0
2 1 10246 3 0 112108 train 4 4 10 9.0
3 1 49683 4 0 112108 train 4 4 10 9.0
4 1 43633 5 1 112108 train 4 4 10 9.0
5 1 13176 6 0 112108 train 4 4 10 9.0
6 1 47209 7 0 112108 train 4 4 10 9.0
7 1 22035 8 1 112108 train 4 4 10 9.0
8 36 39612 1 0 79431 train 23 6 18 30.0
9 36 19660 2 1 79431 train 23 6 18 30.0
10 36 49235 3 0 79431 train 23 6 18 30.0
11 36 43086 4 1 79431 train 23 6 18 30.0
12 36 46620 5 1 79431 train 23 6 18 30.0
13 36 34497 6 1 79431 train 23 6 18 30.0
14 36 48679 7 1 79431 train 23 6 18 30.0
15 36 46979 8 1 79431 train 23 6 18 30.0
16 38 11913 1 0 42756 train 6 6 16 24.0
17 38 18159 2 0 42756 train 6 6 16 24.0
所以所有标记为 order_id == 1 的行,都对应 1 个订单。我想弄清楚用户下了多少个独特的订单。结果应如下所示:
user_id unique_orders
112108 1
79431 1
42756 1
很明显我应该分组order_id
。但是这里的 agg 是什么?我需要做两个 groupBys 吗?最好的方法是什么?
【问题讨论】:
df.groupby('user_id').order_id.nuniques()
?
【参考方案1】:
按照@Quang Hoang 的建议
在评论中,这个问题是GroupBy.nunique的直接应用,
我添加了获得dataframe
所需的内容,就像您预期的输出中显示的那样:
df_nunique=df.groupby('user_id')['order_id'].nunique().rename('unique_orders').reset_index()
print(df_nunique)
user_id unique_orders
0 42756 1
1 79431 1
2 112108 1
【讨论】:
【参考方案2】:您可以尝试使用以下代码。看来len(unique())
的表现比nunique()
好
print(df.groupby('user_id')['order_id'].apply(lambda x: len(x.unique())))
【讨论】:
在apply
之前,您没有关闭引用列中的单引号
已编辑,感谢指正。
为什么 nunique 不起作用?
我得到了预期的输出
我从未说过它不起作用。我说它表现更好。 ***.com/questions/15411158/…以上是关于如何通过另一列的值 pandas 聚合 groupBy [重复]的主要内容,如果未能解决你的问题,请参考以下文章