我有一个 DataFrame,其中有一列状态如下:
datetime | session | try | status
2020-09-17 10:00:01 | '1a' | '1a_1' | 'success'
2020-09-17 10:00:02 | '2a' | '2a_1' | 'fail'
2020-09-17 10:00:03 | '2a' | '2a_2' | 'success'
2020-09-17 10:00:03 | '3a' | '3a_1' | 'interrupted'
2020-09-18 13:00:04 | '4a' | '4a_1' | 'fail'
我想按天对数据进行重新采样,并在会话中按条件计数状态类型(而不是尝试)。
我可以像这样轻松地尝试重新采样:
df['date'] = df['datetime'].dt.date
df['ones'] = np.ones(df.shape[0])
piv = df.pivot_table(index='date', columns='status', values='ones', aggfunc=len).fillna(0)
并且有:
day | success | fail | interrupted
2020-09-17 | 2 | 2 | 1
2020-09-18 | 0 | 1 | 0
但是无论会话中尝试了多少次,我都想按会话聚合它:
- 如果会话中的“成功”状态尝试,则成功+1,失败+0,中断+0;
- 如果会话中的“中断”状态并且会话中没有“成功”状态,则成功+0,失败+0,中断+1;
- 如果会话中没有“中断”和“成功”状态,则成功+0,失败+1,中断+0。
所以我应该得到这样的东西:
day | success | fail | interrupted
2020-09-17 | 2 | 0 | 1
2020-09-18 | 0 | 1 | 0
我坚持使用功能,我想出的所有结果都以“ValueError:系列的真值是模棱两可的”结尾。对于任何想法,我都会非常满意。