python - 如果数据帧基于列值上的过滤器,则从字典中提取行数据
问题描述
字典 dict_set 将数据帧作为其键的值。
我正在尝试根据列中的值基于数据框中“A”列上的过滤器从数据框字典中提取数据。
dict_set={}
dict_set['a']=pd.DataFrame({'A':[1,2,3],'B':[1,2,3]})
dict_set['b']=pd.DataFrame({'A':[1,4,5],'B':[1,5,6]})
df=pd.concat([dict_set[x][dict_set[x]['A']==1] for x in dict_set.keys()],axis=0)
输出如下。
A B
0 1 1
0 1 1
但我希望输出是
A B x
0 1 1 a
0 1 1 b
基本上,我希望 x 的值出现在形成为列的新数据帧中,例如形成的数据帧中的 x 列,这样 df[x] 会给我 x 值。有没有一种简单的方法可以做到这一点?
解决方案
尝试这个:
pd.concat([df.query("A == 1") for df in dict_set.values()], keys=dict_set.keys())\
.reset_index(level=0)\
.rename(columns={'level_0':'x'})
输出:
x A B
0 a 1 1
0 b 1 1
细节:
让我们使用列表理解从字典中获取数据框并过滤数据框。在这里,我选择使用query
,但您也可以使用布尔索引df[df['A'] == 1]
,然后pd.concat
将keys
参数设置为字典键。最后,reset_index
level=0 和rename
.
推荐阅读
- php - php 7.3 下“continue”定位开关相当于“break”错误
- swift - 如何更改 Xcode 上的构建系统信息路径?
- javascript - 如何在 vue.js 应用程序中注册角度元素?
- laravel - 如何在 laravel 控制器中设置会话并在视图刀片中显示会话?
- java - Spring Boot Jar 需要从类路径中读取 Keystore 作为文件
- r - 删除名称与模式匹配的多个数据帧的行
- sql - 重写以下 SQL 查询以使其更高效/改进其执行及其原因
- json - 在 Groovy 中将 hashmap 转换为简单对象
- r - 如何像这样格式化 difftime() 值:Y:M:W:D:H:S
- forms - 如何使用 TypoScript 覆盖 TYPO3 表单框架的 YAML 设置?