避免循环将多个字符串附加到列表中

2024-10-03 23:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在选定行中使用一些字符串更新DataFrame列,我有索引。 到目前为止,我通过列表理解实现了我所需要的:

[data.particleIDs.values[idx[i]].append(particlenames[i]) for i in range(len(idx))]

其中data.particleIDs是需要更新的数据帧列,particlenames是一个包含字符串的列表,idx是一个数组,对于每个字符串,它包含需要写入的数据帧行。几个字符串对应于同一行,我需要将它们全部写入DataFrame列

假设我有一个数据框和用于更新它的字符串列表:

data = pd.DataFrame({'particleIDs': [[] for i in range(20)]}
particlenames = ['c15001'+str(i) for i in range(10))]

我有10个字符串,我需要使用它们来更新数据帧中的行[7 8 15 8 11 0 15 1 12 8],也就是说,我需要将每个字符串添加到相应的行中

FOR循环非常慢,因为实际的particlenames列表很长,我需要重复这个过程好几次

我能做些什么来加快速度吗

谢谢大家!


Tags: 数据字符串indataframe列表fordatalen
1条回答
网友
1楼 · 发布于 2024-10-03 23:21:46

我通过为字符串和相应的 指数:

df_strings = pd.DataFrame({'strings':particlenames,'rows':[7, 8, 15, 8, 11, 0, 15, 1, 12, 8]})

然后通过对行使用groupby方法将字符串附加到apply(list)

df_strings=df_strings.groupby('rows')['strings'].apply(list).reset_index()   

最后,我join这个新的数据帧有一个(data)需要用字符串更新:

data=data.join(df_strings.set_index('rows'))

data=

    particleIDs     strings
0   []  [c150015]
1   []  [c150017]
2   []  NaN
3   []  NaN
4   []  NaN
5   []  NaN
6   []  NaN
7   []  [c150010]
8   []  [c150011, c150013, c150019]
9   []  NaN
10  []  NaN
11  []  [c150014]
12  []  [c150018]
13  []  NaN
14  []  NaN
15  []  [c150012, c150016]
16  []  NaN
17  []  NaN
18  []  NaN
19  []  NaN

因此,我可以避免在创建data数据帧时添加particleIDs(在我的实际情况中,它有其他列),因为连接的列包含我需要的信息

相关问题 更多 >