gpt4 book ai didi

python - 多次复制特定 ID 的多行事件

转载 作者:行者123 更新时间:2023-12-01 07:13:49 24 4
gpt4 key购买 nike

我有客户的通话记录数据。如下所示,其中 ID 是客户 ID,A 和 B 是日志属性:

import pandas as pd 
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(10, 2)), columns=list('AB'),
index = ['A','A','A','B','B','C','C','C','D','D'])
df['ID']=df.index
df = df[['ID','A','B']]
  ID   A   B
A A 46 31
A A 99 54
A A 34 9
B B 46 48
B B 7 75
C C 1 25
C C 71 40
C C 74 53
D D 57 17
D D 19 78

我想根据一些槽为每个 ID 复制每组事件。例如如果槽值为 2,则 ID“A”的所有事件都应复制槽 1 次。

  ID   A   B
A A 46 31
A A 99 54
A A 34 9

A A 46 31
A A 99 54
A A 34 9

并且应该创建一个新索引来指示复制值属于哪个槽:

ID   A   B Index
A 46 31 A-1
A 99 54 A-1
A 34 9 A-1

A 46 31 A-2
A 99 54 A-2
A 34 9 A-2

我尝试过以下解决方案:

slots = 2
nba_data = pd.DataFrame()
idx = pd.Index(list(range(1,slots+1)))

for i in unique_rec_counts_dict:
b = df.loc[df.ID==i,:]
b = b.append([b]*(slots-1),ignore_index=True)
b['Index'] = str(i)+'-'+idx.repeat(unique_rec_counts_dict[i]).astype(str)
nba_data = nba_data.append(b)

它给了我预期的输出,但当插槽增加并且客户数量增加到 10k 时,它就无法扩展。

  ID   A   B Index
0 A 46 31 A-1
1 A 99 54 A-1
2 A 34 9 A-1
3 A 46 31 A-2
4 A 99 54 A-2
5 A 34 9 A-2
0 B 46 48 B-1
1 B 7 75 B-1
2 B 46 48 B-2
3 B 7 75 B-2
0 C 1 25 C-1
1 C 71 40 C-1
2 C 74 53 C-1
3 C 1 25 C-2
4 C 71 40 C-2
5 C 74 53 C-2
0 D 57 17 D-1
1 D 19 78 D-1
2 D 57 17 D-2
3 D 19 78 D-2

我认为由于循环而花费了很长时间。任何矢量化的解决方案都会非常有帮助。

最佳答案

你可以尝试:

slots = 2
new_df = pd.concat(df.assign(Index=f'_{i}') for i in range(1, slots+1))

new_df['Index'] = new_df['ID'] + new_df['Index']

输出:

  ID   A   B Index
A A 48 61 A_1
A A 70 13 A_1
A A 36 23 A_1
B B 22 66 B_1
B B 92 95 B_1
C C 53 9 C_1
C C 41 57 C_1
C C 88 93 C_1
D D 76 82 D_1
D D 11 36 D_1
A A 48 61 A_2
A A 70 13 A_2
A A 36 23 A_2
B B 22 66 B_2
B B 92 95 B_2
C C 53 9 C_2
C C 41 57 C_2
C C 88 93 C_2
D D 76 82 D_2
D D 11 36 D_2

关于python - 多次复制特定 ID 的多行事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086144/

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