python - 比较两列并保留 NaN
问题描述
我的数据的结构是c1
并且c2
我想生成c3
c1 c2 c3
x x True
NaN y NaN
x NaN NaN
y x False
我的方法产生了想要的结果,但速度极慢:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'c1': ['x', np.nan,'x','y'],
'c2': ['x', 'y',np.nan,'x'],
})
df['c3'] = df.apply(lambda row: row['c1'] == row['c2'] if type(row['c1']) is str and type(row['c2']) is str else np.nan, axis=1)
我的方法非常慢,因为我的数据集有 100k+ 行,并且这个过程是针对多列对完成的
是否有更有效或更优雅的方式来实现相同的结果。我正在使用熊猫 0.24.1
解决方案
解决方案使用np.select
cond2 = df['c1'] == df['c2']
cond1 = (df['c1'].isnull()) | (df['c2'].isnull())
df['c3'] = np.select([cond1, cond2], [None, True], False)
print(df)
输出:
c1 c2 c3
0 x x True
1 NaN y None
2 x NaN None
3 y x False
推荐阅读
- javascript - 无法通过 URL 将变量从 javascript 文件传递到 php 文件
- openid - OpenID 客户端提供者
- javascript - 当其中有冒号和下划线时,似乎无法按 ID 选择元素
- javascript - Javascript - 从过滤器中删除数组中的对象
- multithreading - 控制每个 MPI 进程的核心数量(独立于每个等级)
- reactjs - 如何在底部标签导航器中显示徽章?
- javascript - JWK“key_ops”成员与 Web Crypto 调用指定的成员不一致
- f# - 如何使用 F# 实现这个通用 C# 接口?
- javascript - innerHTML Web 组件中的 @import CSS 文件不起作用
- java - 请求超时 - JMeter HTTP2 插件