pandas - 两个数据帧的逻辑“或”
问题描述
我想对两个数据帧进行逻辑“或”:
df1 = pd.DataFrame.from_dict([{'call_id':'aa','486':0,'487':1}])
df2 = pd.DataFrame.from_dict([{'call_id':'aa','503':1,'487':1}])
df1 = df1.set_index('call_id')
df2 = df2.set_index('call_id')
df3 = df1 | df2
结果是:
486 487 503
call_id
aa NaN 1 NaN
但希望的结果是:
486 487 503
call_id
aa 0 1 1
我怎样才能得到它?
解决方案
用于Index.union
所有可能的列并传递给DataFrame.reindex
两个 DataFrame 中相同的列名称:
cols = df1.columns.union(df2.columns)
df3 = df1.reindex(cols, axis=1, fill_value=0) | df2.reindex(cols, axis=1, fill_value=0)
print (df3)
486 487 503
call_id
aa 0 1 1
开箱即用的解决方案DataFrame.add
,但随后需要将更大的转换1
为1
:
df3 = df1.add(df2, fill_value=0).gt(1).astype(int)
#alternative
#df3 = df1.add(df2, fill_value=0).clip(upper=1).astype(int)
print (df3)
486 487 503
call_id
aa 0 1 1
推荐阅读
- mysql - 我们如何在 Google Cloud SQL 中检索日志文件路径
- python - 为 Python 3 安装模式
- mysql - Mysql Query where max(time) 小于今天
- node.js - 在 MongoDb 连接失败的情况下如何向前端发送消息
- mysql - 如何在mysql中将列拆分为多行(以管道作为分隔符)?
- typo3 - 如何在 TYPO3 中禁用一页的扩展名
- java - 使用 google tink 流编码问题的字节数组
- angular - 从单个模板角度动态创建组件
- angular - 角度转换 HttpClient 响应 - 类或接口
- coq - Coq:处理不等式 (<>)