为了账号安全,请及时绑定邮箱和手机立即绑定

根据每组的频率填充数据帧

根据每组的频率填充数据帧

ABOUTYOU 2021-08-14 17:49:33
我有一个pandas.DataFrame df带 apandas.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_column2018-01-01 12:00:00      a                  1.22018-01-01 12:01:00      a                  2.22018-01-01 12:01:00      b                  4.02018-01-01 12:03:00      a                  1.02018-01-01 12:04:00      b                  2.0所需的输出:                    group_column    data_column2018-01-01 12:00:00      a              1.22018-01-01 12:01:00      a              2.22018-01-01 12:02:00      a              2.22018-01-01 12:03:00      a              1.02018-01-01 12:01:00      b              4.02018-01-01 12:02:00      b              4.02018-01-01 12:03:00      b              4.02018-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_gdf_paded = pd.concat(group_resmaple(df, 'group_column'))
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

使用GroupBy.apply有asfreq:


df1 = (df.groupby('group_column')

         .apply(lambda x: x.asfreq('min', 'pad'))

         .reset_index(level=0, drop=True))

print (df1)

                    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


查看完整回答
反对 回复 2021-08-14
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我的方法是


df2 = df.groupby('group_column').resample('min').ffill().reset_index(level=0, drop=True)

print(df2)


                     data_column group_column

2018-01-01 12:00:00          1.2            a               

2018-01-01 12:01:00          2.2            a               

2018-01-01 12:02:00          2.2            a               

2018-01-01 12:03:00          1.0            a               

2018-01-01 12:01:00          4.0            b               

2018-01-01 12:02:00          4.0            b               

2018-01-01 12:03:00          4.0            b               

2018-01-01 12:04:00          2.0            b  


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信