我使用了output = result.set_index('times').groupby(pd.TimeGrouper('H')).mean()
然后output.between_time('11:00', '12:00')
只使用了我想要的两个小时。我正在努力搞清楚的是,如果有办法选择12:00:00,但如果没有,11:00:00是使用的,如果可能的话。以下是输出代码段的内容:
times A B C D
1996-12-04 11:00:00 NaN 0.081826 0.112259 0.134100
1996-12-04 12:00:00 NaN 0.080180 0.107108 0.126118
....
2017-01-15 11:00:00 0.246591 0.309864 0.332677 0.362805
2017-01-15 12:00:00 0.242433 0.301287 0.325492 0.355687
2017-01-16 11:00:00 0.131201 0.155804 0.170489 0.180293
2017-01-16 12:00:00 NaN NaN NaN NaN NaN NaN
2017-01-17 11:00:00 0.078308 0.093946 0.104750 0.110965
2017-01-17 12:00:00 0.083883 0.097341 0.108580 0.114755
2017-01-18 11:00:00 NaN NaN NaN NaN NaN NaN
2017-01-18 12:00:00 NaN NaN NaN NaN NaN NaN
2017-01-19 11:00:00 0.092868 0.109789 0.120100 0.125462
2017-01-19 12:00:00 0.098974 0.113243 0.125806 0.130909
我正在寻找的解决方案:
times A B C D
1996-12-04 12:00:00 NaN 0.080180 0.107108 0.126118
2017-01-15 12:00:00 0.242433 0.301287 0.325492 0.355687
2017-01-16 11:00:00 0.131201 0.155804 0.170489 0.180293
2017-01-17 12:00:00 0.083883 0.097341 0.108580 0.114755
2017-01-19 12:00:00 0.098974 0.113243 0.125806 0.130909
我假设我需要在if语句中使用for循环,但我刚开始学习Python,所以我还没有掌握它。
答案 0 :(得分:1)
首先,如果需要,请按dropna
删除所有NaN行。
然后groupby
DatetimeIndex.date
和last
汇总。
必须使用reset_index
set_index
方法,因为在groupby日期之后会丢失时间。
df = df.dropna(how='all', axis=0)
df = df.reset_index().groupby(df.index.date).last().set_index('times')
print (df)
A B C D
times
1996-12-04 12:00:00 NaN 0.080180 0.107108 0.126118
2017-01-15 12:00:00 0.242433 0.301287 0.325492 0.355687
2017-01-16 11:00:00 0.131201 0.155804 0.170489 0.180293
2017-01-17 12:00:00 0.083883 0.097341 0.108580 0.114755
2017-01-19 12:00:00 0.098974 0.113243 0.125806 0.130909
答案 1 :(得分:0)
您正在寻找的是拥有每组的第一个。想象一下,您要添加一列day
和一列hour
,然后您可以对这些值进行排序,按日期对它们进行分组,然后取出每个组的最后一个(如果可用则为12,否则为11)。
result = df.sort_values('hour').groupby('day').apply(lambda g: g[-1]).reset_index()
您可以在运行之前填写这些列,或者即时计算它们,例如
df.groupby(df['date'].apply(lambda x: x.date))
答案 2 :(得分:0)
如果要根据数据框中的值进行选择,可以使用
df.reset_index().set_index('times').loc['12:00:00']
主要缺点:给定值必须在索引中。
index A B C D
times
12:00:00 2017-01-15 0.242433 0.301287 0.325492 0.355687
12:00:00 2017-01-16 NaN NaN NaN NaN
12:00:00 2017-01-17 0.083883 0.097341 0.108580 0.114755
12:00:00 2017-01-18 NaN NaN NaN NaN
12:00:00 2017-01-19 0.098974 0.113243 0.125806 0.130909
如果您想给出时间间隔,您可以这样做:
df.reset_index().set_index('times').loc['12:00:00':'13:00:00']