使用 pandas python 将 2 个 groupby 输出与 lambda 组合
Posted
技术标签:
【中文标题】使用 pandas python 将 2 个 groupby 输出与 lambda 组合【英文标题】:Combining 2 groupby outputs with lambda using pandas python 【发布时间】:2020-04-18 12:00:36 【问题描述】:表(df):
customer_id Order_date
1 2015-01-16
1 2015-01-19
2 2014-12-21
2 2015-01-10
1 2015-01-10
3 2018-01-18
3 2017-03-04
4 2019-11-05
4 2010-01-01
3 2019-02-03
3 2019-01-01
3 2018-01-01
我想要的输出:
使用 groupby 为每个客户 ID 提取 order_dates 数量(一个人至少有 3 笔交易)的代码,我还需要说最近的交易日期。
Customer_id No_order_date Most recent order date
1 3 2015-01-19
3 5 2019-02-03
到目前为止尝试过的代码:
freq = 3
df.groupby('customer_id')['order_date'].nunique().loc[lambda x:
x>=freq].reset_index().rename(columns='order_date':'No_Order_Dates')
Customer_id No_Order_Dates
1 3
3 5
df.groupby('customer_id')['order_date'].max().reset_index().rename(columns=
'order_date':'Most recent order Date')
Customer_id Most recent order date
1 2015-01-19
3 2019-02-03
如何组合两个 groupby 输出?我需要两个都在一个表中(有没有一种方法可以在不使用连接或合并的情况下加入,或者我必须只使用连接/合并)
【问题讨论】:
df.groupby('customer_id')['Order_date'].agg('Order_date_nunique':'nunique','Most recent order date':'max')
?
或命名为 agg:df.groupby('customer_id').agg(Order_date = ('Order_date','nunique'),Most_recent_order_date = ('Order_date','max'))
没问题 :)
这样更好,因为我还可以使用命名聚合来聚合其他列
df.groupby('customer_id').agg(No_transactions=('order_date','nunique().loc[lambda x: x>=7]',Most_recent_order_date = ('order_date', 'max')) 不起作用。Lambda 在聚合的情况下不起作用?@anky_91
请重新打开问题'
【参考方案1】:
您可以在 groupby 之后使用与 .loc[]
相同的命名聚合:
(df.groupby('customer_id').agg(No_transactions=('Order_date','nunique'),
Most_recent_order_date = ('Order_date', 'max'))
.loc[lambda x: x['No_transactions']>=3])
或查询:
(df.groupby('customer_id').agg(No_transactions=('Order_date','nunique'),
Most_recent_order_date = ('Order_date', 'max'))
.query("No_transactions>=3"))
No_transactions Most_recent_order_date
customer_id
1 3 2015-01-19
3 5 2019-02-03
【讨论】:
以上是关于使用 pandas python 将 2 个 groupby 输出与 lambda 组合的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas:合并两个没有键的表(将 2 个数据帧与广播所有元素相乘;NxN 数据帧)
使用 python、pandas 合并 2 个基于 3 个条件的单独 excel 文件
Python pandas:如果A列值出现不止一次,则分配B列的第一个值
将 loc 代码行组合成 1 个函数 python pandas
Python Pandas:将 2,000,000 个 DataFrame 行转换为二进制矩阵 (pd.get_dummies()) 而不会出现内存错误?