簡體   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