我希望这不是重复的问题。我正在尝试用其他数据框的列的非零值替换数据框中的列的值。这是一个小例子:
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列,因此对每个列单独执行此过程是没有意义的。我正在寻找最最有效的方式来执行此任务。想任何建议。
答案 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