[英]How to change the criteria of a condition based on values in a column - 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.