gpt4 book ai didi

python - Pandas 用行中的值替换列

转载 作者:行者123 更新时间:2023-12-01 02:07:57 26 4
gpt4 key购买 nike

如何通过在行中查找值来矢量化替换。

对于数据框如下:

df = pd.DataFrame([(1, 2, 3, 4, np.NaN, np.NaN, 4),
(1, 2, 3, 0, 0, np.NaN, 0),
(1, 2, 3, 4, 5, np.NaN, 5)],
columns = ['P0', 'P1', 'P2', 'P3', 'P4', 'P5', 'Last_not_NaN_value'],
index = ['row1', 'row2', 'row3'])

输出df:

        P0  P1  P2  P3  P4     P5   Last_not_NaN_value
row1 1 2 3 4 NaN NaN 4
row2 1 2 3 0 0.0 NaN 0
row3 1 2 3 4 5.0 NaN 5

我怎样才能做类似的事情

df.replace(df['Last_not_NaN_value'], 0 ) <- 不执行任何操作。

如何查找 last_not_NaN_value 在 df 中的位置,并将其替换为 0,例如:

        P0  P1  P2  P3  P4     P5   Last_not_NaN_value
row1 1 2 3 *0* NaN NaN 4
row2 1 2 3 0 *0* NaN 0
row3 1 2 3 4 *0* NaN 5

最佳答案

根据要求进行矢量化。进行广播比较,找到替换索引,然后进行相应替换。然后,您可以使用巧妙的 df[:] = ... 技巧将结果赋回。

v = df.values
i = v[:, :-1]
j = v[:, -1]

v[np.arange(v.shape[0]), (i == j[:, None]).argmax(axis=1)] = 0
df[:] = v

df
P0 P1 P2 P3 P4 P5 Last_not_NaN_value
row1 1.0 2.0 3.0 0.0 NaN NaN 4.0
row2 1.0 2.0 3.0 0.0 0.0 NaN 0.0
row3 1.0 2.0 3.0 4.0 0.0 NaN 5.0

关于python - Pandas 用行中的值替换列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48883106/

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