如何按条件更改列上的行值(python、pandas)

2024-09-27 04:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

因此,其中列“type”==A

如果值为 是比2大的吗

否则我希望值为0

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

我对数据的期望是什么

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

Tags: numberdataframedfdatatypenpnanone
2条回答

您可以使用^{}获取所有type{}行,然后使用df._get_numeric_data/^{}'number')获取所有数字字段,然后使用^{}并使用^{}将它们转换为int,现在使用^{}使用新值更新数据帧

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

使用^{}按条件选择相等的A列以及第一列和最后一列名称之间的列,然后比较更大的列,如^{},因为使用了映射True, False1,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
    

或通过分配回:

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

相关问题 更多 >

    热门问题