gpt4 book ai didi

python - pandas分组并填写缺失的时间间隔序列

转载 作者:行者123 更新时间:2023-12-04 16:25:31 30 4
gpt4 key购买 nike

我有一个如下图所示的数据框

df = pd.DataFrame({'person_id': [11,11,11,21,21,21,31,31,31,31,31],
'time' :[-1,5,17,11,25,39,46,4,100,150,1],
'value':[101,102,121,120,143,153,160,170,96,97,99]})

我想做的是

a) 通过生成序列号(例如:1,2,3,4)并从前一行复制值(对于所有其他列)来填充缺少的 time

我正在尝试类似下面的东西

df.groupby(['person_id']).cumcount() + 1
df['sequence'] = g.cumcount() + 1

但这并不能帮助我获得预期的输出

我希望我的输出如下所示(下面显示了 1 个主题的示例)

enter image description here

最佳答案

让我们将 time 列设置为数据帧的索引,然后 groupby 上的数据帧 person_id 然后为每个按 person_id 分类的组 reindex组使其 index 符合 time 列中指定的值范围,最后 concat获取所需数据帧的所有组:

grp = df.set_index('time').groupby('person_id')
groups = [g.reindex(range(g.index.min(), g.index.max() + 1)).ffill().reset_index() for _, g in grp]
out = pd.concat(groups, ignore_index=True).reindex(df.columns, axis=1)

或者,您可以先为每个 person_idtime 列中指定的相应值范围创建元组对,然后 reindex 数据框:

grp = df.groupby('person_id')['time']
idx = [(k, n) for k, t in grp for n in range(t.min(), t.max() + 1)]
out = df.set_index(['person_id', 'time']).reindex(idx).ffill().reset_index()

结果(对于 person_id 11):

    person_id  time  value
0 11.0 -1 101.0
1 11.0 0 101.0
2 11.0 1 101.0
3 11.0 2 101.0
4 11.0 3 101.0
5 11.0 4 101.0
6 11.0 5 102.0
7 11.0 6 102.0
8 11.0 7 102.0
9 11.0 8 102.0
10 11.0 9 102.0
11 11.0 10 102.0
12 11.0 11 102.0
13 11.0 12 102.0
14 11.0 13 102.0
15 11.0 14 102.0
16 11.0 15 102.0
17 11.0 16 102.0
18 11.0 17 121.0

关于python - pandas分组并填写缺失的时间间隔序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65264750/

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