【发布时间】:2019-04-14 07:45:53
【问题描述】:
我有一个 pandas.DataFrame df 和一个 pandas.DatetimeIndex 和一个名为 group_column 的列。
我需要df 有一个分钟频率(意味着每分钟有一排)。
但是,group_column 中的每个值都需要如此,因此每分钟都可能有多个值。
注意:
-
group_column可以有数百个唯一值。 - 有些组可以“持续”几分钟,而其他组可以持续几天,边缘由
group_column中值的第一次和最后一次出现确定。
示例
输入:
dates = [pd.Timestamp('2018-01-01 12:00'), pd.Timestamp('2018-01-01 12:01'), pd.Timestamp('2018-01-01 12:01'), pd.Timestamp('2018-01-01 12:03'), pd.Timestamp('2018-01-01 12:04')]
df = pd.DataFrame({'group_column': ['a', 'a','b','a','b'], 'data_column': [1.2, 2.2, 4, 1, 2]}, index=dates)
group_column data_column
2018-01-01 12:00:00 a 1.2
2018-01-01 12:01:00 a 2.2
2018-01-01 12:01:00 b 4.0
2018-01-01 12:03:00 a 1.0
2018-01-01 12:04:00 b 2.0
想要的输出:
group_column data_column
2018-01-01 12:00:00 a 1.2
2018-01-01 12:01:00 a 2.2
2018-01-01 12:02:00 a 2.2
2018-01-01 12:03:00 a 1.0
2018-01-01 12:01:00 b 4.0
2018-01-01 12:02:00 b 4.0
2018-01-01 12:03:00 b 4.0
2018-01-01 12:04:00 b 2.0
我的尝试
我已经这样做了,但是它似乎高度效率低下:
def group_resmaple(df, group_column_name):
values = df[group_column_name].unique()
for value in values:
df_g = df.loc[df[group_column]==value]
df_g = df_g.asfreq('min', 'pad')
yield df_g
df_paded = pd.concat(group_resmaple(df, 'group_column'))
【问题讨论】:
-
我认为您应该将
group_column更改为索引的一部分 (df.set_index('group_column', inplace=True, drop=False)),然后尝试找出如何使重采样工作,或者(理想情况下)在整个 DataFrame 上,或者也许一次一组。见stackoverflow.com/questions/15799162/…