python - Pandas DataFrame 对多列的按位“&”操作
问题描述
我偶然发现了 Pandas 的以下行为,有人知道为什么输出有 6 列而不是 3 列吗?
dfa = pd.DataFrame(dict(col1=[np.nan,1,1], col2=[np.nan,np.nan,np.nan], col3=[1,1,1]))
dfb = pd.DataFrame(dict(col4=[1,np.nan,1], col5=[np.nan,np.nan,np.nan], col6=[np.nan,1,np.nan]))
# output
dfa.isnull() & dfb.notnull()
col1 col2 col3 col4 col5 col6
0 False False False False False False
1 False False False False False False
2 False False False False False False
解决方案
原因是不同的列名,所以它的工作方式类似于通过两个列名的联合重新索引,换句话说,就像另一个缺失的行被添加了False
值:
c = dfa.columns.union(dfb.columns)
m = (dfa.isnull().reindex(c, fill_value=False, axis=1) &
dfb.notnull().reindex(c, fill_value=False, axis=1))
print (m)
col1 col2 col3 col4 col5 col6
0 False False False False False False
1 False False False False False False
2 False False False False False False
详情:
print (dfa.isnull().reindex(c, fill_value=False, axis=1))
col1 col2 col3 col4 col5 col6
0 True True False False False False
1 False True False False False False
2 False True False False False False
print (dfb.notnull().reindex(c, fill_value=False, axis=1))
col1 col2 col3 col4 col5 col6
0 False False False True False False
1 False False False False False True
2 False False False True False False
如果将它们更改为相同,则获得 3 列:
dfb.columns = dfa.columns
m = dfa.isnull() & dfb.notnull()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False
按字典重命名列的解决方案:
d = dict(zip(dfb.columns, dfa.columns))
m = dfa.isnull() & dfb.rename(columns=d).notnull()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False
如果两个 DataFrame 中的长度始终相同,则可以将其中一个转换为 numpy 数组:
m = dfa.isnull() & dfb.notnull().to_numpy()
print (m)
col1 col2 col3
0 True False False
1 False False False
2 False False False
推荐阅读
- python - python3目标的Jenkins作业失败
- npm - 如何在 Github 操作中指定节点的路径?
- android - 用户选择时将应用程序降级到较低的 versionCode
- vue.js - 增加 v-data-table Vuetify 中标题的字体大小
- c - 从任何基数转换为小数和区分大小写
- c# - PDFium,pdf中提取的图像损坏但渲染时没有问题
- javascript - javascript 代码不返回任何内容(nan/emptystring/no 问题)有什么问题?
- python - 如何使用 tweepy python 模块仅流式传输 LIST 时间线的状态?
- javascript - 如何从其他 json 文件内部加载 json 文件?
- google-cloud-http-load-balancer - GCP 后端服务更新