繁体   English   中英

如何根据条件更改 pandas 列值?

[英]How to change pandas column values based on condition?

我有 pandas dataframe 之类的

import numpy as np
import pandas as pd
a = np.arange(0,8,1)
b = np.arange(10,18,1)
c = np.ones(8)
d = np.column_stack((a,b,c))
e = pd.dataframe(d)
e.loc[(e.iloc[:,-1]<1.01) & (e.iloc[:,-1]>0.99)]=4.0

我想将e的最后一列更改为4.0 ,只要值为<1.01 & >0.99 但是,最后一行将所有值更改为4.0 我尝试按照上面的https://stackoverflow.com/a/15315507进行操作,但看起来不起作用。 知道有什么问题吗?

在使用DataFrame.loc索引的列名称选择的最后一列中,所有值都是4因为在输入数据中是1 - c = np.ones(8)

#working well for unique columns names
e.loc[(e.iloc[:,-1]<1.01) & (e.iloc[:,-1]>0.99), e.columns[-1]]=4.0

或者通过DataFrame.iloc将掩码转换为 boolean 数组:

#working well for any columns names
e.iloc[((e.iloc[:,-1]<1.01) & (e.iloc[:,-1]>0.99)).to_numpy(), -1]=4.0

print (e)
     0     1    2
0  0.0  10.0  4.0
1  1.0  11.0  4.0
2  2.0  12.0  4.0
3  3.0  13.0  4.0
4  4.0  14.0  4.0
5  5.0  15.0  4.0
6  6.0  16.0  4.0
7  7.0  17.0  4.0

更改的数据样本:

np.random.seed(2022)

a = np.arange(0,8,1)
b = np.arange(10,18,1)
c = np.random.random(8) + 0.5
d = np.column_stack((a,b,c))
e = pd.DataFrame(d)
print (e)
     0     1         2
0  0.0  10.0  0.509359
1  1.0  11.0  0.999058
2  2.0  12.0  0.613384
3  3.0  13.0  0.549974
4  4.0  14.0  1.185408
5  5.0  15.0  0.986988
6  6.0  16.0  1.397657
7  7.0  17.0  1.147452

e.iloc[((e.iloc[:,-1]<1.01) & (e.iloc[:,-1]>0.99)).to_numpy(), -1]=4.0
print (e)
     0     1         2
0  0.0  10.0  0.509359
1  1.0  11.0  4.000000
2  2.0  12.0  0.613384
3  3.0  13.0  0.549974
4  4.0  14.0  1.185408
5  5.0  15.0  0.986988
6  6.0  16.0  1.397657
7  7.0  17.0  1.147452

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM