【问题标题】:Grouping days based on relative position根据相对位置分组天数
【发布时间】:2017-12-10 15:02:43
【问题描述】:
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)

不会工作,因为日子不连续,我对日子的位置感兴趣。

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案1】:

    您可以通过factorizeDatetimeIndex.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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2019-06-11
      • 2019-02-20
      • 2021-10-28
      • 1970-01-01
      • 2023-03-31
      • 2021-11-28
      相关资源
      最近更新 更多