[英]How to change pandas column values based on condition?
I have pandas dataframe like我有 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
I want to change last column of e
to 4.0
wherever values are <1.01 & >0.99
.我想将
e
的最后一列更改为4.0
,只要值为<1.01 & >0.99
。 However, the last line changes all values to 4.0
.但是,最后一行将所有值更改为
4.0
。 I tried to follow https://stackoverflow.com/a/15315507 above, but looks like not working.我尝试按照上面的https://stackoverflow.com/a/15315507进行操作,但看起来不起作用。 Any idea what is wrong?
知道有什么问题吗?
In last column selected by columns name with indexing with DataFrame.loc
, there are all values 4
because in input data are 1
- c = np.ones(8)
:在使用
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
Or by DataFrame.iloc
with convert mask to boolean array:或者通过
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
Changed data sample:更改的数据样本:
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.