如果数据帧基于列值上的过滤器,则从字典中提取行数据
Posted
技术标签:
【中文标题】如果数据帧基于列值上的过滤器,则从字典中提取行数据【英文标题】:Extract row data from dictionary if dataframes based on filter on a column value 【发布时间】:2021-01-18 23:10:01 【问题描述】:字典 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 值。有没有简单的方法来做到这一点?
【问题讨论】:
在问题中添加dict_set
,有什么错误?发布整个错误回溯。
@Ch3steR 完成。很抱歉造成混乱。
【参考方案1】:
试试这个:
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
。
【讨论】:
以上是关于如果数据帧基于列值上的过滤器,则从字典中提取行数据的主要内容,如果未能解决你的问题,请参考以下文章