Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 蟒蛇熊猫。替换列中的值_Python_Pandas - Fatal编程技术网

Python 蟒蛇熊猫。替换列中的值

Python 蟒蛇熊猫。替换列中的值,python,pandas,Python,Pandas,假设我有一个DataFrame对象,如下所示: age_diff result 1 0 -1 1 0 1 我想通过应用abs函数来替换列age\u diff中的负值。此外,如果age_diff中的值发生更改,则应切换result列中的值(如果为0,则切换为1,否则切换为0) 经过此转换后,如上所示的DataFrame应该如下所示: age_diff result 1

假设我有一个DataFrame对象,如下所示:

age_diff    result
       1         0
      -1         1
       0         1
我想通过应用
abs
函数来替换列
age\u diff
中的负值。此外,如果
age_diff
中的值发生更改,则应切换
result
列中的值(如果为0,则切换为1,否则切换为0)

经过此转换后,如上所示的DataFrame应该如下所示:

age_diff    result
       1         0
       1         0
       0         1
任何人都可以告诉我如何实现这一点吗?

使用++by
dict

print (df)
   age_diff  result
0         1       0
1        -1       0
2        -1       1
3         0       1


mask = df['age_diff'] < 0
df['age_diff'] = df['age_diff'].abs()
df['result'] = df['result'].mask(mask, df['result'].map({0:1, 1:0}))
print (df)
   age_diff  result
0         1       0
1         1       1
2         1       0
3         0       1

您可以采取的另一种方法是应用函数:

def magic(row):
    if abs(row['age_diff']) != row['age_diff']:
        row['age_diff'] = abs(row['age_diff'])
        row['result'] = 1 - row['result']
    return row

df = df.apply(magic,axis=1)

我用
np得到
age_diff
的符号,然后从那里开始操作

s = np.sign(df.age_diff.values)

df.age_diff *= s
df.result -= (s == -1)

print(df)

   age_diff  result
0         1       0
1         1       0
2         0       1

另一个单线性解决方案使用lambda获得年龄差异的abs,如果年龄差异为负值,则改变结果符号

df.apply(lambda x: [abs(x.age_diff),abs((x.age_diff<0) - x.result)],axis=1)
Out[165]: 
   age_diff  result
0         1       0
1         1       0
2         0       1

df.apply(lambda x:[abs(x.age\u diff),abs(x.age\u diff)super,很高兴能帮上忙。天气真好!
df.apply(lambda x: [abs(x.age_diff),abs((x.age_diff<0) - x.result)],axis=1)
Out[165]: 
   age_diff  result
0         1       0
1         1       0
2         0       1