如何将一列的每日总和除以Python Pandas数据帧中另一列的每日总和?

时间:2015-02-12 15:09:32

标签: python-2.7 pandas calculated-columns operation

我有一个带有日期索引的熊猫数据框和3列数据。

如何计算列的每日总和' C'并将其除以每栏的总和' A'并将其写入新列(D)?

 Index               A   B    C
2014-01-01 00:15:00  10  9   90    
2014-01-01 00:30:00  11  8   88 
2014-01-01 00:45:00  12  7   84
2014-01-01 01:00:00  13  6   78 
2014-01-01 01:15:00  14  5   70 
2014-01-01 01:30:00  15  4   60 
2014-01-01 01:45:00  16  3   48 
2014-01-01 02:00:00  17  2   34 
2014-01-01 02:15:00  18  1   18 
2014-01-01 02:30:00  19  0    0
2014-01-01 02:45:00  20  1   20 
2014-01-01 03:00:00  21  2   42
...

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

我能想到的唯一方法就是分组然后再合并。 我修改了您示例中的某些日子,因此可能会有不同的日期进行分组。

import pandas as pd

Dict = {'Dates':['2014-01-01 00:15:00','2014-01-01 00:30:00',
        '2014-01-01 00:45:00','2014-01-02 01:00:00',
        '2014-01-02 01:15:00','2014-01-03 01:30:00',
        '2014-01-03 01:45:00','2014-01-03 02:00:00',
        '2014-01-03 02:15:00','2014-01-03 02:30:00',
        '2014-01-04 02:45:00','2014-01-04 03:00:00'],
        'A':[10,11,12,13,14,15,16,17,18,19,20,21],
        'B':[9,8,7,6,5,4,3,2,1,0,1,2],
        'C':[90,88,84,78,70,60,48,34,18,0,20,42]}

df = pd.DataFrame(Dict)
df['Dates'] = pd.to_datetime(df['Dates'])
df.set_index('Dates',inplace=True)

DailySums = df.groupby(df.index.date).sum()
DailySums['D'] = DailySums.C / DailySums.A
DailySums.index = pd.to_datetime(DailySums.index)

df1 = pd.merge(df, DailySums[['D']], left_on=df.index.date, 
    right_on=DailySums.index.date,how='left').set_index('key_0')

会给你:

             A  B   C         D
key_0                          
2014-01-01  10  9  90  7.939394
2014-01-01  11  8  88  7.939394
2014-01-01  12  7  84  7.939394
2014-01-02  13  6  78  5.481481
2014-01-02  14  5  70  5.481481
2014-01-03  15  4  60  1.882353
2014-01-03  16  3  48  1.882353
2014-01-03  17  2  34  1.882353
2014-01-03  18  1  18  1.882353
2014-01-03  19  0   0  1.882353
2014-01-04  20  1  20  1.512195
2014-01-04  21  2  42  1.512195