gpt4 book ai didi

python - 加快 Pandas groupby 中行的复制速度?

转载 作者:行者123 更新时间:2023-11-28 20:38:32 26 4
gpt4 key购买 nike

我有一个非常大的数据框(数亿行)。有两个组 ID,group_id_1group_id_2。数据框如下所示:

group_id_1    group_id_2    value1    time
1 2 45 1
1 2 49 2
1 4 95 1
1 4 55 2
2 2 44 1
2 4 88 1
2 4 90 2

对于每个 group_id_1 x group_id_2 组合,我需要复制具有最新时间的行,并将时间递增 1。换句话说,我的表应该是这样的:

group_id_1    group_id_2    value1    time
1 2 45 1
1 2 49 2
1 2 49 3
1 4 95 1
1 4 55 2
1 4 55 3
2 2 44 1
2 2 44 2
2 4 88 1
2 4 90 2
2 4 90 3

现在,我正在做:

for name, group in df.groupby(['group_id_1', 'group_id_2']):
last, = group.sort_values(by='time').tail(1)['time'].values
temp = group[group['time']==last]
temp.loc[:, 'time'] = last + 1
group = group.append(temp)

这是极其低效的。如果我将上面的代码放入一个函数中,并使用 .apply() 方法和 groupby 对象,它也会花费大量时间。

如何加快这个过程?

最佳答案

您可以使用 groupby与骨料 last , 添加时间 addconcat转为原文:

df1 = df.sort_values(by='time').groupby(['group_id_1', 'group_id_2']).last().reset_index()
df1.time = df1.time.add(1)
print (df1)
group_id_1 group_id_2 value1 time
0 1 2 49 3
1 1 4 55 3
2 2 2 44 2
3 2 4 90 3

df = pd.concat([df,df1])
df = df.sort_values(['group_id_1','group_id_2']).reset_index(drop=True)
print (df)
group_id_1 group_id_2 value1 time
0 1 2 45 1
1 1 2 49 2
2 1 2 49 3
3 1 4 95 1
4 1 4 55 2
5 1 4 55 3
6 2 2 44 1
7 2 2 44 2
8 2 4 88 1
9 2 4 90 2
10 2 4 90 3

关于python - 加快 Pandas groupby 中行的复制速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41063149/

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