gpt4 book ai didi

python - 根据条件用另一个列值替换大量列中的值

转载 作者:行者123 更新时间:2023-11-28 22:30:53 25 4
gpt4 key购买 nike

我有这个数据:

id   |  d1   |  d2  |  d3  | .... |  d64   | FINAL_GRADE
1 | 0 | 15 | 0 | .... | 23 | 95
2 | 8 | 0 | 12 | .... | 0 | 75

我想用 FINAL_GRADE 列中的相应值替换每行中的所有非零值,并获得此表:

id   |  d1   |  d2  |  d3  | .... |  d64   | FINAL_GRADE
1 | 0 | 95 | 0 | .... | 95 | 95
2 | 75 | 0 | 75 | .... | 0 | 75

这是我的代码:

df[df.ix[:, 1:63] != 0] = df['FINAL_GRADE']

但是,我收到此错误:TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value

我想知道我的代码是否有任何问题?或者我的方法是完全错误的。感谢您的帮助!

最佳答案

一种可能是使用 DF.mask()创建的 bool 掩码上的方法。

使用 .ix 设置值可能会在这里失败,因为您正在对具有混合 dtypes 的列子集进行操作(float - 由于生成 bool 掩码和子集操作 & int - FINAL_GRADE 中的值要查找)。

这将是生成 TypeError 的主要原因。

步骤:

1) 通过使用 str.startswith 选择以字符 d 开头的列来子集数据帧。

2) 对于子集中的值非零的条件,使用 DF.mask,我们用 FINAL_GRADE 中的内容逐行替换它们指定 axis=0

3) 最后,使用 pd.concat 按列连接 idFINAL_GRADE 和屏蔽的 DF >(轴=1)


sub_df = df[df.columns[df.columns.str.startswith('d')]]
mask_df = sub_df.mask(sub_df != 0, df['FINAL_GRADE'], axis=0)
pd.concat([df['id'], mask_df, df['FINAL_GRADE']], axis=1)

enter image description here

关于python - 根据条件用另一个列值替换大量列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com