我有一个带有日期索引的熊猫数据框和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
...
非常感谢你的帮助。
答案 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