【发布时间】:2016-04-23 05:00:32
【问题描述】:
我有一个 Pandas 数据框 pmov,其中 SDRFT 和 DRFT 列包含浮点值。某些 DRFT 值为 0.0。发生这种情况时,我想用 SDRFT 值替换 DRFT 值。出于测试目的,我将 DRFT = 0.0 的行存储在数据帧 df 中。
我已经尝试定义函数:
def SDRFT_is_DRFT(row):
if row['SDRFT'] == row['DRFT']:
pass
elif row['SDRFT'] == 0:
row['SDRFT'] = row['DRFT']
elif ['DRFT'] == 0:
row['DRFT'] = row['SDRFT']
return row[['SDRFT','DRFT']]
并应用它:df.apply(SDRFT_is_DRFT, axis=1)
返回:
In []: df.apply(SDRFT_is_DRFT, axis=1)
Out[]:
SDRFT DRFT
118 29.500000 0.0
144 0.000000 0.0
212 29.166667 0.0
250 21.000000 0.0
308 21.500000 0.0
317 24.500000 0.0
327 11.000000 0.0
334 31.000000 0.0
347 29.500000 0.0
348 35.000000 0.0
这不是我想要的结果。
我也试过这个功能:
def drft_repl(row):
if row['DRFT']==0:
row['DRFT'] = row['SDRFT']
这似乎适用于 df.DRFT = df.apply(drft_repl, axis=1)
但pmov.DRFT = pmov.apply(drft_repl, axis=1) 导致 DRFT 值 100% 替换为 SDRFT 值,除非 DRFT 值为 nan。
如何有条件地将一列中的单元格值替换为同一行另一列中的值?
【问题讨论】: