首页 > 解决方案 > python pandas 以优雅的方式按条件逐行替换

问题描述

我有以下问题:

例如,给定一个数据框,

import pandas as pd
df = pd.DataFrame({'col1':[1,0,0,1],'col2':['B','B','A','A'],'col3':[1,2,3,4]})

在其他一些工具中,我可以轻松地根据条件创建一个新列,比如

如果 df['col1'] == '0' & ~df['col2'].isnull() else 'col1' 则使用 'col2' 创建新列 'col3'

这个其他工具的工作速度非常快。到目前为止我在python中没有找到对应的表达式。

1.)我尝试了 np.where 迭代行但不允许在结果中与确切行相对应的动态值

2.) 我试过 .apply(lambda ... ) ,这似乎很慢。

如果你能找到一种优雅的方法来解决这个问题,我会很高兴。谢谢。

标签: pythonpandas

解决方案


我认为需要倒置numpy.where(感谢@jpp):notnullisnull

df = pd.DataFrame({'col1':[1,0,0,1],'col2':['B','B','A','A'],'col3':[1,2,3,4]})

df['col3'] = np.where((df['col1'] == 0) & (df['col2'].notnull()), df['col2'], df['col1'])
print (df)
   col1 col2 col3
0     1    B    1
1     0    B    B
2     0    A    A
3     1    A    1

推荐阅读