我将数据存储在csv中,当读入pandas数据帧时,采用以下格式(真实文件有更多列,但这足以解释问题):
Treatment time
0 A 12.63
1 A 83.28
2 A 83.54
3 B 85.04
4 B 85.79
5 A 131.78
我希望在24小时箱中按每次处理的数量,然后产生累积总和。我是这样做的:
bin_values = np.arange(0, 264, 24)
group_names = np.arange(0, 240, 24)
df['categories'] = pd.cut(df['time'], bin_values, labels=group_names)
产生:
Treatment time categories
0 A 12.63 0
1 A 83.28 72
2 A 83.54 72
3 B 85.04 72
4 B 85.79 72
5 A 131.78 120
我可以:
cat_sum = df.groupby(['Treatment', 'categories'])['categories'].size()
cat_sum = cat_sum.groupby(level=[0]).cumsum().reset_index(name='cum_sum')
提供格式的数据框:
Treatment categories cum_sum
0 A 0 1
1 A 72 3
2 A 120 4
3 B 72 2
此时我被困住了。我希望采用这种方法并生成类似于现有可视化的东西:
Treatment 0 24 48 72 96 120 144 etc ...
A 1 1 1 3 3 4 4
B 0 0 0 2 2 2 2
因此,基本上通过每次治疗进行转置,并在每24小时的时间段内添加回缺少的类别以提供运行总计。我一直在搜索,甚至找不到任何东西,就像我需要的东西一样,这或许表明我会以错误的方式解决这个问题。
所以我的问题是,我是围着房子来制作我需要的东西,还是最后一步只是逃避我?任何帮助将不胜感激。
答案 0 :(得分:0)
使用df.pivot。
使用您的示例df
:
Treatment categories cum_sum
0 A 0 1
1 A 72 3
2 A 120 4
3 B 72 2
In [1]: df.pivot(index='Treatment', columns='categories', values='cum_sum')
Out[1]:
categories 0 72 120
Treatment
A 1.0 3.0 4.0
B NaN 2.0 NaN