我需要用选定行中的一些字符串更新DataFrame列,为此我有了索引。 到目前为止,我已经可以通过列表理解来实现所需的功能:
[data.particleIDs.values[idx[i]].append(particlenames[i]) for i in range(len(idx))]
其中data.particleIDs
是需要更新的DataFrame列,particlenames
是一个包含字符串的列表,而idx
是一个数组,对于每个字符串,该数组都需要更新写。几个字符串对应于同一行,我需要将它们全部写在DataFrame列中。
假设我有一个DataFrame和用于更新它的字符串列表:
data = pd.DataFrame({'particleIDs': [[] for i in range(20)]}
particlenames = ['c15001'+str(i) for i in range(10))]
我有10个字符串,我需要使用它们来更新DataFrame中的行[7 8 15 8 11 0 15 1 12 8]
,即,我需要将每个字符串添加到相应的行中。
FOR循环非常慢,因为实际的particlenames
列表很长,我需要重复此过程几次。
我有什么办法可以加快速度吗?
谢谢!
答案 0 :(得分:0)
我通过为字符串和对应的字符串创建另一个数据框解决了我的问题 索引:
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
这个新的DataFrame与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
因此,我可以避免在创建particleIDs
DataFrame(在我的实际情况下,它具有其他列)时添加data
,因为联接的列包含我所需的信息。