熊猫按组划分的总计运行时间间隔

时间:2020-03-27 20:15:14

标签: python pandas

我想要一张这样的客户订单表:

static async Task<List<int>> MethodTest(int i)
{
    await Task.Delay(10);
    return new List<int>() { i, i, i };
}
async Task method()
{
    Task<List<int>>[] tasks = new Task<List<int>>[4];
    tasks[0] = MethodTest(0);
    tasks[1] = MethodTest(1);
    tasks[2] = MethodTest(2);
    tasks[3] = MethodTest(3);
    await Task.WhenAll(tasks);
    Console.WriteLine(tasks[0].Result);
}

并创建一个按周计算运行总计的表。像这样:

customer_id | order_date | amount
0           | 2020-03-01 | 10.00
0           | 2020-03-02 |  2.00
1           | 2020-03-02 |  5.00
1           | 2020-03-02 |  1.00
2           | 2020-03-08 |  2.00
1           | 2020-03-09 |  1.00
0           | 2020-03-10 |  1.00

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

IIUC:

df['order_date'] = pd.to_datetime(df['order_date'])

(df.groupby(['customer_id',df.order_date.dt.floor('7D')])
   .amount.sum()
   .unstack('customer_id',fill_value=0)
   .cumsum()
)

输出:

customer_id     0    1    2
order_date                 
2020-02-27   12.0  6.0  0.0
2020-03-05   13.0  7.0  2.0

答案 1 :(得分:1)

@Quang Hoang美丽而简洁。但是您严格要7天还是一周要它?

我可以在一周内对其进行分区,因为希望的日期显示在您的结果中。显然@Quang Hoang的经验无与伦比。随时批评我,因为我正在学习

将日期强制为日期时间,并将日期设置为索引

df['order_date']=pd.to_datetime(df['order_date'])
df.set_index(df['order_date'], inplace=True)
df.drop(columns=['order_date'], inplace=True

同时按客户ID分组,然后按金额重新采样。

df.groupby('customer_id')['amount'].apply(lambda x:x.resample('W').sum()).unstack('customer_id',fill_value=0).cumsum()

结果

enter image description here