首页 > 解决方案 > 如果数据帧基于列值上的过滤器,则从字典中提取行数据

问题描述

字典 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 值。有没有一种简单的方法可以做到这一点?

标签: pythonpandasdataframedictionaryconcatenation

解决方案


尝试这个:

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.concatkeys参数设置为字典键。最后,reset_indexlevel=0 和rename.


推荐阅读