如何按列条件python,pandas更改行值

问题描述

嘿,我想按列的条件更改行。

所以列“ type” == A

我希望cols [col1-col5]如果值为1 更大2

否则我希望该值为0

the DATA 
data={"col1":[np.nan,3,4,5,9,2,6],"col2":[4,6,1,5],"col3":[7,11,7],"col4":[14,22,8,np.nan,9],"col5":[0,7,"type":["A","A","C","B","E"],"number":["one","two","one","two"]}
df=pd.DataFrame.from_dict(data)
df

我期望数据如何

data={"col1":[0,"col2":[1,"col3":[1,"col4":[1,"two"]}
df=pd.DataFrame.from_dict(data)
df

解决方法

您可以使用df.query获取所有type A行,然后使用df._get_numeric_data / df.select_dtypes'number')获取所有数字字段,然后使用df.gt并使用df.astype将它们强制转换为int,现在使用df.update

用新值更新DataFrame
df.update(df.query('type == "A"')._get_numeric_data().gt(2).astype(int))
                                #.select_dtypes('number')
df

   col1  col2  col3  col4  col5 type number
0   0.0   1.0   1.0   1.0   0.0    A    one
1   1.0   0.0   1.0   1.0   1.0    A    two
2   4.0   4.0   0.0  22.0   7.0    C    two
3   1.0   1.0   1.0   1.0   1.0    A    one
4   9.0   0.0   3.0   6.0   8.0    B    one
5   0.0   0.0   1.0   0.0   0.0    A    two
6   6.0   5.0   7.0   9.0   9.0    E    two
,

使用DataFrame.loc根据条件A进行选择,并在第一列和最后一列名称之间进行选择,然后像DataFrame.gt进行比较,以将True,False映射到{{1 }}用于将掩码转换为整数,最后由DataFrame.update更新:

1,0

或通过分配回来:

df.update(df.loc[df['type'].eq('A'),'col1':'col5'].gt(2).astype(int))
print (df)
   col1  col2  col3  col4  col5 type number
0   0.0   1.0   1.0   1.0   0.0    A    one
1   1.0   0.0   1.0   1.0   1.0    A    two
2   4.0   4.0   0.0  22.0   7.0    C    two
3   1.0   1.0   1.0   1.0   1.0    A    one
4   9.0   0.0   3.0   6.0   8.0    B    one
5   0.0   0.0   1.0   0.0   0.0    A    two
6   6.0   5.0   7.0   9.0   9.0    E    two
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...