首页 > 解决方案 > Pandas Dataframe:根据正/负值分配给不同的列

问题描述

我想要实现的目标如下:

   a  b  c
0  1  0  0
1 -1  0  0

使用上面的数据框,关于 column a,对于正行,分配给 column 中的相应行b,对于负值,分配给 column c

   a  b  c
0  1  1  0
1 -1  0 -1

我现在正在使用以下代码,但是有什么办法可以用一行而不是两行编写它?

import pandas as pd
import numpy as np
df = pd.DataFrame({'a': [1, -1], 'b':[0, 0], 'c':[0,0]})
df.b = np.where(df.a > 0, df.a, df.b)
df.c = np.where(df.a < 0, df.a, df.c)

标签: pythonpandasnumpy

解决方案


我从写出来开始

df.b, df.c = (df.a > 0)*df.a + (df.a < 0)*df.b, (df.a < 0)*df.a +  (df.a > 0)*df.c

然后意识到你可以用你所拥有的东西做同样的拆包。我想有很多方法可以用更晦涩的方式做到这一点


推荐阅读