如何通过另一列的值 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas 按另一列的平均值对一列的值进行排序

根据另一列中的值删除一列的重复项,Python,Pandas

Python 使用依赖于另一列的值的复杂函数聚合时间序列

Pandas:一旦列达到另一列的某个值,我如何返回行值?

熊猫通过根据另一列的值添加列级别来重塑数据框[重复]

用 Pandas 将 DataFrame 中某些列和行的值替换为同一 DataFrame 中另一列的值