pandas DataFrame:用另一列中的值替换多列中的值

时间:2019-11-11 10:50:53

标签: python pandas dataframe

我有一个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是带有列名的列表。
  • 99被认为是一个缺失值,我想用给定类别(即col1或col2取决于选择)的(已经计算出)均值替换

它可以工作,但是替换所有这些值所需的时间似乎比必要的时间更长。我认为必须有一种更快(以计算方式)实现相同目标的方法。

有什么建议吗?

1 个答案:

答案 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是遇到,否则取各自已经存在的值。