我有一个pandas DataFrame,我想用同一行中的另一个值替换列中的某些值。
我做了以下事情:
df[cols[23:30]] = df[cols[23:30]].apply(lambda x: x.replace(99, df['col1']))
df[cols[30:36]] = df[cols[30:36]].apply(lambda x: x.replace(99, df['col2']))
cols
是带有列名的列表。它可以工作,但是替换所有这些值所需的时间似乎比必要的时间更长。我认为必须有一种更快(以计算方式)实现相同目标的方法。
有什么建议吗?
答案 0 :(得分:0)
您可以尝试:
import numpy as np
df[cols[23:30]] = np.where(df[cols[23:30]] == 99, df[['col1'] * (30-23)], df[cols[23:30]])
df[cols[30:36]] = np.where(df[cols[30:36]] == 99, df[['col2'] * (36-30)], df[cols[30:36]])
df[["col1"] * n]
将创建与重复n
次完全相同的列的数据帧,因此numpy可以将其用作要迭代的n
列的掩码,如果99
是遇到,否则取各自已经存在的值。