用anoth的细胞值对Pandas细胞值进行条件置换

2024-09-30 00:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas dataframe pmov,其中的SDRFT和DRFT列包含浮点值。某些DRFT值为0.0。当发生这种情况时,我想用SDRFT值替换DRFT值。出于测试目的,我将DRFT=0.0的行存储在dataframedf中。在

我试着定义函数:

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)

返回:

^{pr2}$

这不是我想要的结果。在

我也试过这个功能:

def drft_repl(row):
    if row['DRFT']==0:
        row['DRFT'] = row['SDRFT']

似乎对测向仪= 数据框应用(drft_repl,轴=1)

但是pmov.DRFT = pmov.apply(drft_repl, axis=1)导致DRFT值100%替换为SDRFT值,除非DRFT值是nan。在

如何有条件地将一列中的单元格值替换为同一行的另一列中的值?在


Tags: dataframepandasifisdefreplrow浮点
2条回答

试试这个:

df.loc[df.DRFT == 0, 'DRFT'] = df.SDRFT 

我想你可以用^{}。第一个用值DRFT替换列DRFT,其中是条件True,最后一个是用SDRFT替换列DRFT

pmov.SDRFT = pmov.SDRFT.mask(pmov.SDRFT == 0, pmov.DRFT)
pmov.DRFT = pmov.DRFT.mask(pmov.DRFT == 0, pmov.SDRFT)
print pmov  
         SDRFT       DRFT
118  29.500000  29.500000
144   0.000000   0.000000
212  29.166667  29.166667
250  21.000000  21.000000
308  21.500000  21.500000
317  24.500000  24.500000
327  11.000000  11.000000
334  31.000000  31.000000
347  29.500000  29.500000
348  35.000000  35.000000

另一个带有^{}的解决方案:

^{pr2}$

为了更好地测试DataFrame被更改:

print pmov
     SDRFT   DRFT
118   29.5  29.50
144    0.0   5.98
212    0.0   7.30
250   21.0   0.00
308   21.5   0.00
317    0.0   0.00
327   11.0   0.00
334   31.0   0.00
347   29.5   0.00
348   35.0  35.00

pmov.SDRFT = pmov.SDRFT.mask(pmov.SDRFT == 0, pmov.DRFT)
pmov.DRFT = pmov.DRFT.mask(pmov.DRFT == 0, pmov.SDRFT)
print pmov 
     SDRFT   DRFT
118  29.50  29.50
144   5.98   5.98
212   7.30   7.30
250  21.00  21.00
308  21.50  21.50
317   0.00   0.00
327  11.00  11.00
334  31.00  31.00
347  29.50  29.50
348  35.00  35.00
pmov.loc[pmov.DRFT == 0, 'DRFT'] = pmov.SDRFT 
pmov.loc[pmov.SDRFT == 0, 'SDRFT'] = pmov.DRFT 
print pmov  
     SDRFT   DRFT
118  29.50  29.50
144   5.98   5.98
212   7.30   7.30
250  21.00  21.00
308  21.50  21.50
317   0.00   0.00
327  11.00  11.00
334  31.00  31.00
347  29.50  29.50
348  35.00  35.00

相关问题 更多 >

    热门问题