对pandas数据帧中的列进行求和

时间:2017-03-02 20:36:44

标签: python pandas dataframe

我有一个pandas DataFrame,其中包含按日期时间索引的数字列,如下所示:

                                  ABC  XYZ
2016-12-01 06:43:02.541287-06:00    2   11 
2016-12-01 06:43:06.341349-06:00   52    3
2016-12-01 06:43:11.745070-06:00   16    0 
2016-12-01 06:43:18.245247-06:00    9  100
2016-12-01 06:43:25.545450-06:00    0   75
2016-12-01 06:43:35.953279-06:00    4    0 
2016-12-01 06:43:45.553310-06:00   13    8 
2016-12-01 06:43:55.053600-06:00    3   12
2016-12-01 06:43:59.153890-06:00    6    9 

我想" groupby"每隔10秒计算一次ABC和XYZ的总和,并生成一个新的数据帧,其总和如下所示:

                                  ABC  XYZ
2016-12-01 06:43:10.000000-06:00   54   14
2016-12-01 06:43:20.000000-06:00   25  100
2016-12-01 06:43:30.000000-06:00    0   75
2016-12-01 06:43:40.000000-06:00    4    0
2016-12-01 06:43:50.000000-06:00   13    8
2016-12-01 06:44:00.000000-06:00    9   21

即。前两行是在相同的10秒周期内,所以对于ABC,我添加2 + 52得到54,对于XYZ我加11 + 3得到14.然后我将这些总和放在新的DataFrame中。我的代码是如此可怕的kludgey,我甚至不想包含它。任何建议都会非常感激。

1 个答案:

答案 0 :(得分:1)

resamplesum

一起使用
df = df.resample('10S').sum()
print (df)
                     ABC  XYZ
2016-12-01 12:43:00   54   14
2016-12-01 12:43:10   25  100
2016-12-01 12:43:20    0   75
2016-12-01 12:43:30    4    0
2016-12-01 12:43:40   13    8
2016-12-01 12:43:50    9   21

但是如果需要使用时区,首先tz_localize默认为UTC,然后按tz_convert转换为-6时区(如US/Indiana-Starke):

df = df.tz_localize('UTC').resample('10S').sum().tz_convert('US/Indiana-Starke')
print (df)
                           ABC  XYZ
2016-12-01 06:43:00-06:00   54   14
2016-12-01 06:43:10-06:00   25  100
2016-12-01 06:43:20-06:00    0   75
2016-12-01 06:43:30-06:00    4    0
2016-12-01 06:43:40-06:00   13    8
2016-12-01 06:43:50-06:00    9   21