У меня есть 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'))