gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:27:00 34 4
gpt4 key购买 nike

我有一个 pandas.DataFrame df,其中包含 pandas.DatetimeIndex 和一个名为 group_column 的列。我需要 df 具有每分钟的频率(意味着每分钟有一行)。

但是,group_column 中的每个值都需要如此,因此每分钟可能有多个值。

注意:

  1. group_column 可以有数百个唯一值。
  2. 一些组可以“持续”几分钟,而另一些组可以持续几天,边缘由 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'))

最佳答案

使用GroupBy.applyasfreq :

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

关于python - 根据每组的频率填充数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53247754/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com