python - 如何通过另一个数据框中的键过滤数据框中的列
问题描述
我的第一个数据框是
obj1 obj2 obj3
01 02 03
02 03 04
另一个数据框是:
col1 col2 col3
obj1 M N
obj2 M T
obj3 M N
我只想要第一个数据框中标有的列
{'col2':M, 'col3':N}
想要的结果是
obj1 obj3
01 03
02 04
我似乎无法以体面的方式实现这一目标。
解决方案
一个想法是将字典转换为一行DataFrame
,merge
因为没有参数on
它通过所有列名称的交集合并(在帮助器DataFrame中通过字典的键):
d = {'col2':'M', 'col3':'N'}
vals = pd.DataFrame([d]).merge(df2)['col1']
或DataFrame.query
与 dict 理解一起使用:
vals = df2.query(' & '.join(['{}=={}'.format(i,repr(j))
for i, j in d.items()]))['col1']
Index.isin
然后按and过滤DataFrame.loc
,:
表示所有行:
df = df1.loc[:, df1.columns.isin(vals)]
print (df)
obj1 obj3
0 01 03
1 02 04
推荐阅读
- php - 如果上传的文档将检查图标,但如果没有,它将有一个 x 图标,我该如何做这个 if else 声明
- sql - 是否可以在同一视图中找到已聚合计算的 MAX 值?
- javascript - 我的 .each() 函数有问题,它给了我一个错误
- javascript - 复杂的螺旋矩阵
- javascript - 使用 vis.js 时间线更新时间线时显示加载屏幕或加载消息
- c# - 无法访问 microsoft-graph 的 SkipToken 方法
- flutter - 如何获取过渡动画的状态
- haskell - Haskell - 如何将两个单子 Maybe 函数组合成一个函数
- java - 流过滤器中的 ContainsIgnoreCase 以计算字符串列表中出现的一个特定单词
- azure - 更新服务时不反映端点名称更改