Pandas DataFrame按月份分组,如果为0,则计数结果

0kjbasz6  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(179)

我有两只Pandas数据框
客户

  1. CustomerID
  2. 1
  3. 2
  4. 3

订单

  1. OrderId CustomerID Date
  2. 1 1 2022-01-02
  3. 2 1 2022-01-04
  4. 3 2 2022-02-03
  5. 4 2 2022-03-03

我想这样转置我的结果。对于每个月,我想知道订单的计数。如果有一些或没有(0)

  1. CustomerID Date CountOrderID
  2. 1 2022-01 2
  3. 2 2022-01 1
  4. 3 2022-01 0
  5. 1 2022-02 0
  6. 2 2022-02 1
  7. 3 2022-02 0
  8. 1 2022-03 0
  9. 2 2022-03 1
  10. 3 2022-03 0

我怎么能在Pandas中做到这一点呢?

vjrehmav

vjrehmav1#

通过由MultiIndex.from_product创建的新多索引将GroupBy.sizeDataFrame.reindex一起使用:

  1. Orders['Date'] = pd.to_datetime(Orders['Date']).dt.to_period('m')
  2. mux = pd.MultiIndex.from_product([Orders['Date'].unique(), Customer['CustomerID']],
  3. names=['Date','CustomerID'])
  4. df = (Orders.groupby(['Date','CustomerID'])
  5. .size()
  6. .reindex(mux, fill_value=0)
  7. .reset_index(name='CountOrderID'))
  8. print (df)
  9. Date CustomerID CountOrderID
  10. 0 2022-01 1 2
  11. 1 2022-01 2 0
  12. 2 2022-01 3 0
  13. 3 2022-02 1 0
  14. 4 2022-02 2 1
  15. 5 2022-02 3 0
  16. 6 2022-03 1 0
  17. 7 2022-03 2 1
  18. 8 2022-03 3 0

上次用途:

  1. df['Date'] = df['Date'].dt.to_timestamp()
展开查看全部

相关问题