import datetime
dates_list = ['2015-03-28 10:15:36.560000', '2015-03-28 11:35:17.820000',
'2015-03-29 13:34:54.380000', '2015-03-29 14:10:41.900000',
'2015-03-31 16:55:43.680000', '2015-03-31 16:57:58.320000',
'2015-04-02 18:54:31.480000', '2015-04-02 19:46:46.580000',
'2015-04-03 20:58:27.940000', '2015-04-03 21:30:05.600000']
df = pd.DataFrame(data=[1,2,3,np.nan,5,6,np.nan,np.nan,8,9],columns=['value'],index=[datetime.datetime.strptime(date, '%Y-%m-%d %H:%M:%S.%f') for date in dates_list])
df
Out[18]:
value
2015-03-28 10:15:36.560 1.0
2015-03-28 11:35:17.820 2.0
2015-03-29 13:34:54.380 3.0
2015-03-29 14:10:41.900 NaN
2015-03-31 16:55:43.680 5.0
2015-03-31 16:57:58.320 6.0
2015-04-02 18:54:31.480 NaN
2015-04-02 19:46:46.580 NaN
2015-04-03 20:58:27.940 8.0
2015-04-03 21:30:05.600 9.0
我想计算2个方法:1)在偶数位置的日子中分组 [2015-03-28,2015-03-31,2015-04-03] 和2)分组平均日[ 2015-03-29 2015-04-02 ]。
在这种情况下
df2 = df.groupby(df.index.day % 2).agg(np.mean)
由于日子不是连续的,所以我没有工作,而且我对这些日子的位置感兴趣。
答案 0 :(得分:0)
您可以factorize
使用DatetimeIndex.date
和模2
创建数组,并将其用于聚合的groupby
:
df = df.groupby(pd.factorize(df.index.date)[0] % 2).mean()
print (df)
value
0 5.166667
1 3.000000
详情:
print (pd.factorize(df.index.date)[0] % 2)
[0 0 1 1 0 0 1 1 0 0]