PHP前端开发

根据列名更新 DF 中的值

百变鹏仔 1天前 #Python
文章标签 DF
问题内容

我有下一个 pandas dataframe:

x_1 x_2 x_3 x_4 col_to_replace cor_factor        1   2   3   4   x_2            1    3   3   5   1   x_1            6    2   2   0   0   x_3            0...

我想用 cor_factor 中的值更新保存在 col_to_replace 中的名称列,并将结果保存在相应的列以及 car_factor 列中。一些(丑陋的)解决方案可能是:

for i in len(df.shape[0]):    df[df['col_to_replace']].iloc[i] = df[df['col_to_replace']].iloc[i] - df['cor_factor'].iloc[i]                                                                              df['cor_factor'].iloc[i] = df['cor_factor'].iloc[i] -  df[df['col_to_replace']].iloc[i]

这种方式绝对不省时。我正在寻找更快的解决方案。

df 的输出应该是这样的:

x_1 x_2 x_3 x_4 col_to_replace cor_factor        1   1   3   4   x_2            -1    -3  3   5   1   x_1            3    2   2   0   0   x_3            0...

正确答案


使用 pivot 更正 x_值和索引查找更正最后一列。由于值发生变化,请确保在修改之前进行复制:

# perform indexing lookup# save the value for lateridx, cols = pd.factorize(df['col_to_replace'])corr = df.reindex(cols, axis=1).to_numpy()[np.arange(len(df)), idx]# pivot and subtract the factor# ensure original order of the columnscols = df.columns.intersection(cols, sort=false)df[cols] = df[cols].sub(df.pivot(columns='col_to_replace',                                 values='cor_factor'),                        fill_value=0).convert_dtypes()# correct with the saved "corr"df['cor_factor'] -= corr

输出:

x_1  x_2  x_3  x_4 col_to_replace  cor_factor0    1    1    3    4            x_2          -11   -3    3    5    1            x_1           32    2    2    0    0            x_3           0