我有一个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,我甚至不想包含它。任何建议都会非常感激。
答案 0 :(得分:1)
将resample
与sum
:
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