根据相对位置对天数进行分组

时间:2017-12-10 15:02:43

标签: python pandas datetime dataframe

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)
由于日子不是连续的,所以我没有工作,而且我对这些日子的位置感兴趣。

1 个答案:

答案 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]