用Pnadas数据框中的另一列值有条件地替换一列中的值

时间:2019-06-19 14:08:39

标签: python pandas dataframe

我希望这不是重复的问题。我正在尝试用其他数据框的列的非零值替换数据框中的列的值。这是一个小例子:

import pandas as pd

d = {'x': [1, 2, 3], 'y': ["", "", 4], 'z': ["", 5, ""]}
df = pd.DataFrame(index=['A','B','C'], data=d)
df.replace('', 0, inplace=True) # replace empty cells with zeros
print(df)
 x  y  z
A  1  0  0
B  2  0  5
C  3  4  0

现在,如果y列或z列中有任何非零元素,则将x列(与y az列位于同一位置)的值替换为非零。

df.loc[(df.y > 0), 'x'] = df.y
df.loc[(df.z > 0), 'x'] = df.z
print(df)
   x    y   z
A   1   0   0
B   5   0   5
C   4   4   0

问题是我要处理的数据框有100列,因此对每个列单独执行此过程是没有意义的。我正在寻找最最有效的方式来执行此任务。想任何建议。

1 个答案:

答案 0 :(得分:0)

IIUC

s=df.replace('', np.nan).drop('x',1).ffill(1).iloc[:,-1]
df.x=np.where(s.isnull(),df.x,s)
df
Out[285]: 
     x  y  z
A  1.0      
B  5.0     5
C  4.0  4