Python 蟒蛇熊猫。替换列中的值
假设我有一个DataFrame对象,如下所示: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
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
任何人都可以告诉我如何实现这一点吗?使用++bydict
:
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