Pandas Dataframe:基于正/负值分配给不同的列

时间:2018-11-29 03:14:44

标签: python pandas numpy

我要实现的目标如下:

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

具有上述数据框,关于列a,对于正行,分配给列b中的对应行,对于负值,分配给列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)

2 个答案:

答案 0 :(得分:0)

如果您想在一条标志线上使用np.where就很好了

s=df.assign(key=['b','c']).set_index('key',append=True).unstack().sum(level=1,axis=1)
s
key    b    c
0    1.0  0.0
1    0.0 -1.0
df.update(s)
df
   a    b    c
0  1  1.0  0.0
1 -1  0.0 -1.0

答案 1 :(得分:0)

我从写出来开始

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

然后意识到您可以完全按照自己的方式进行拆包。我猜有很多方法可以使您以更晦涩的方式完成此任务