繁体   English   中英

使用 NamedAgg 聚合 Pandas DataFrame 条件

[英]Aggregate Pandas DataFrame with condition using NamedAgg

我有一个带有 order_state 列的订单表。 并且需要计算每个订单 state 的订单,按小时分组,但不使用按 order_state 列分组。 我想使用 NamedAgg。 可能吗? 像这样的东西:

orders_agg = orders.groupby(
    by=[pandas.Grouper(key='created_at', freq='H'), 'source']
).agg(
    orders_count=pandas.NamedAgg('created_at', 'count'),
    finished_orders_count=pandas.NamedAgg('order_state', lambda x: (x == 'finished').count()),
    cancelled_orders_count=pandas.NamedAgg('order_state', lambda x: (x == 'offer_cancelled').count())
).reset_index().rename(columns={'created_at': 'datetime_msk'})

结果应该是: 在此处输入图像描述 但现在我得到每列的总订单数。

我认为您需要将 .count( .count()更改为.sum()以获得 count True的值:

orders_agg = orders.groupby(
by=[pandas.Grouper(key='created_at', freq='H'), 'source']
).agg(
orders_count=pandas.NamedAgg('created_at', 'count'),
finished_orders_count=pandas.NamedAgg('order_state', lambda x: x == 'finished').sum(),
    cancelled_orders_count=pandas.NamedAgg('order_state', lambda x: (x == 'offer_cancelled').sum())
).reset_index().rename(columns={'created_at': 'datetime_msk'})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM