gpt4 book ai didi

python - 根据列名替换值

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:24 26 4
gpt4 key购买 nike

我有一个大型数据框(>1000 行)的测量值。其中一列是 Fails(str 类型),其中包含测量失败的列。测量是否失败不仅仅取决于值,因此我不能仅替换所有负值,这就是为什么有“失败”列

Cd  Sn  Sb   Zn  Fails 
-1 -2 0.0 4 Cd Sn Sb
-2 0.0 -1 5 Cd Sn Sb
-3 -3 -2 6 Cd Sn Sb
1 2 3 4 Zn

如果元素失败,我需要用 nan 替换测量值。因此,对于 df 中的每一行,如果 col 失败,我需要设置 df.loc[row,col]=nan 。

Cd  Sn    Sb   Zn  Fails 
nan nan nan 4 Cd Sn Sb
nan nan nan 5 Cd Sn Sb
nan nan nan 6 Cd Sn Sb
1 2 3 nan Zn

执行此操作的有效方法是什么?

编辑:

我尝试使用上面的一个简单示例。 df 中还有更多列。实际上有 29 个不同的元素。这就是感兴趣的部分的样子

data.iloc[:,5:34]
Out[45]:
Se As Ga Ni ... Tl Pb U Ir
0 19.026755 3.290577 0.0 0.0 ... 0.619604 4.674604 0.030976 0.0
1 35.682812 55.108543 0.0 0.0 ... 4.217798 25.213694 0.216073 0.0
2 93.600473 187.171588 0.0 0.0 ... 12.480773 74.187307 0.647617 0.0
3 229.575678 560.092296 0.0 0.0 ... 37.041994 261.348135 1.926765 0.0
4 56.337625 14.344270 0.0 0.0 ... 0.375804 0.926559 0.004466 0.0
.. ... ... ... ... ... ... ... ... ...
871 NaN NaN NaN NaN ... NaN NaN NaN NaN

data["Fails"]
Out[50]:
0 Cd Sn Sb Cu Zn
1 Cd Sn Sb Cu Zn
2 Cd Sn Sb Cu Zn
3 Cd Sn Sb Cu Zn
4 Cd Sn Sb Cu Zn

871

当我尝试建议的解决方案时,我得到的 nan 比我应该得到的要多

     Se  As  Ga  Ni         Mn  ...  Tl  Pb         U  Ir
0 NaN NaN NaN NaN 0.715142 ... NaN NaN 0.030976 NaN
1 NaN NaN NaN NaN 2.295966 ... NaN NaN 0.216073 NaN
2 NaN NaN NaN NaN 6.654716 ... NaN NaN 0.647617 NaN
3 NaN NaN NaN NaN 20.567433 ... NaN NaN 1.926765 NaN
4 NaN NaN NaN NaN 0.285542 ... NaN NaN 0.004466 NaN
.. .. .. .. .. ... ... .. .. ... ..
871 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN

在前几行中,只有 Cd、Sn、Sb、Cu 和 Zn 应设置为 nan,其他所有内容应保持原样。

最佳答案

这是我的方法:

rep_cols = ['Cd','Sn','Sb','Cu','Zn']
s = df.Fails.str.split(expand=True).stack().reset_index(name='col')

df.loc[:, rep_cols] = df.mask(s.pivot('level_0', 'col', 'level_1').notnull())

输出:

    Cd   Sn   Sb   Zn     Fails
0 NaN NaN NaN 4.0 Cd Sn Sb
1 NaN NaN NaN 5.0 Cd Sn Sb
2 NaN NaN NaN 6.0 Cd Sn Sb
3 1.0 2.0 3.0 NaN Zn

关于python - 根据列名替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59108736/

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