计算累积总和并从熊猫数据框转置

时间:2016-11-28 16:43:10

标签: python python-3.x pandas

我将数据存储在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小时的时间段内添加回缺少的类别以提供运行总计。我一直在搜索,甚至找不到任何东西,就像我需要的东西一样,这或许表明我会以错误的方式解决这个问题。

所以我的问题是,我是围着房子来制作我需要的东西,还是最后一步只是逃避我?任何帮助将不胜感激。

1 个答案:

答案 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