熊猫重新采样:添加group_id

时间:2019-01-15 13:42:33

标签: pandas

考虑以下重新采样的系列:

import pandas as pd
index = pd.date_range('1/1/2000', periods=30, freq='T')
series = pd.Series(range(30), index=index)
series.resample('3T')

我想在原始series上添加一个新列,该列为原始(未重新采样的数据)的每一行指示该行所属的重新采样数据的存储桶。因此,对于上述情况的前几行,应该是:

                       series    resample_id
2000-01-01 00:00:00     0        0
2000-01-01 00:01:00     1        0
2000-01-01 00:02:00     2        0
2000-01-01 00:03:00     3        1

因为前三行位于同一重新采样的存储桶中。

1 个答案:

答案 0 :(得分:3)

从索引创建Series,先创建transform,然后再创建factorize

index = pd.date_range('1/1/2000', periods=30, freq='T')
series = pd.Series(range(30), index=index)
s1 = series.index.to_series().resample('3T').transform('first')

df = series.to_frame('series').assign(resample_id = pd.factorize(s1)[0])
print (df)
                     series  resample_id
2000-01-01 00:00:00       0            0
2000-01-01 00:01:00       1            0
2000-01-01 00:02:00       2            0
2000-01-01 00:03:00       3            1
2000-01-01 00:04:00       4            1
2000-01-01 00:05:00       5            1
2000-01-01 00:06:00       6            2
2000-01-01 00:07:00       7            2
2000-01-01 00:08:00       8            2
2000-01-01 00:09:00       9            3

另一种解决方案是floorDatetimeindex的底线factorize

df = series.to_frame('series').assign(resample_id = pd.factorize(series.index.floor('3T'))[0])

或者将GroupBy.ngroupGrouper一起使用,以代替resample

s1 = series.groupby(pd.Grouper(freq='3T')).ngroup()

df = series.to_frame('series').assign(resample_id = s1)

因为:

s1 = series.resample('3T').ngroup()
  

AttributeError:“ DatetimeIndexResampler”对象没有属性“ ngroup”