给定一个数据框 df:
Column A: [0, 1, 3, 4, 6]
Column B: [0, 0, 0, 0, 0]
目标是有条件地替换 B 列中的值。如果 A 列的值存在于集合 assginedToA 中,我们将 B 列中的相应值替换为常量 b .
例如:如果 b=1 且 assignedToA={1,4},则结果为成为
Column A: [0, 1, 3, 4, 6]
Column B: [0, 1, 0, 1, 0]
我查找 A 值并将 B 值写入其中的代码如下所示:
df.loc[df['A'].isin(assignedToA),'B']=b
此代码有效,但对于巨大的数据帧来说确实很慢。 你有什么建议,如何加快这个过程?
数据框 df 有大约 500 万行,assignedToA 最多有 7 个值。
请您参考如下方法:
您可能会发现通过下拉到 numpy 可以提高性能:
df = pd.DataFrame({'A': [0, 1, 3, 4, 6],
'B': [0, 0, 0, 0, 0]})
def jp(df, vals, k):
B = df['B'].values
B[np.in1d(df['A'], list(vals))] = k
df['B'] = B
return df
def original(df, vals, k):
df.loc[df['A'].isin(vals),'B'] = k
return df
df = pd.concat([df]*100000)
%timeit jp(df, {1, 4}, 1) # 8.55ms
%timeit original(df, {1, 4}, 1) # 16.6ms
