python - 如果另外两列中有数据,则在 Pandas 中创建一个为 True 的新列
问题描述
在我的 pandas 数据集中,有两列(即 A 和 B)我希望从中创建第三列(C),如果 A 或 B 被填充,则该列是“真”。
我已经尝试了以下代码。但是,运行此代码后,C 列中的所有值都是“否”(表示 A 和 B 列中的所有单元格都是空的,但事实并非如此)。
df['C'] = C
C = []
for index, row in df.iterrows():
if df['a'].isnull() is False:
c.append("Yes")
elif df['b'].isnull() is False:
c.append("Yes")
else:
c.append("No")
我是 Python 的新手(和 StackOverflow 也是),所以如果有人有任何建议,他们将不胜感激。
谢谢!
解决方案
使用DataFrame.notnull
withDataFrame.any
来检查 whena
或b
notnull,然后我们可以使用np.where
or来映射使用orSeries.map
创建的布尔系列:Yes
No
df['c'] = df[['a','b']].notnull().any(axis = 1).map({True:'Yes',False:'No'})
#alternative
#df['c'] = df[['a','b']].notnull().any(axis = 1).replace({True:'Yes',False:'No'})
#logic inverse
#df['c'] = df[['a','b']].notnull().any(axis = 1).map({True:'No',False:'Yes'})
或者
import numpy as np
df['c'] = np.where(df[['a','b']].notnull().any(axis = 1),'Yes','No')
#df['c'] = pd.np.where(df[['a','b']].notnull().any(axis = 1),'Yes','No')
#logic inverse
#df['c'] = np.where(df[['a','b']].notnull().any(axis = 1),'No','Yes')
推荐阅读
- azure - 通过 Microsoft Graph API 注册应用程序无法在 Azure 中的企业应用程序下显示它们
- python - pywhatkit.sendwhatmsg_to_group 不工作
- android - 获取电池温度 [KOTLIN]
- video - 有没有办法在ffmpeg的过滤器中使用当前帧和总帧作为变量?
- php - 本地 Wordpress 安装正在从 Wordpress 管理仪表板上的 URL 中删除“wp-admin”
- ruby-on-rails - 如何调用javascript函数
- iphone - 在 iPhone 上全屏
- mockito - mockito-core 和 mockito-android 之间的区别
- mysql - 如何使用 sql 从 Mysql 中基于文本的列中提取 http 链接
- java - CompletableFuture 以及使用 FileReader 读取,程序不会退出