Python 在由不同数据帧组成的列表上迭代

Python 在由不同数据帧组成的列表上迭代,python,pandas,for-loop,Python,Pandas,For Loop,假设我有一个由3个数据帧组成的列表,即 lst = [df1,df2,df3] 其中: d1 = {'col1':['a','b','c','d','e']} df1= pd.DataFrame(d1) d2 = {'col1':['b','c','a','d','e']} df2= pd.DataFrame(d2) d3 = {'col1':['b','c','e','d','a']} df3= pd.DataFrame(d3) 对于lst中的每个df,我想通过col1找到字母a的秩,并从

假设我有一个由3个数据帧组成的列表,即

lst = [df1,df2,df3]
其中:

d1 = {'col1':['a','b','c','d','e']}
df1= pd.DataFrame(d1)
d2 = {'col1':['b','c','a','d','e']}
df2= pd.DataFrame(d2)
d3 = {'col1':['b','c','e','d','a']}
df3= pd.DataFrame(d3)
对于
lst
中的每个df,我想通过
col1
找到字母
a
的秩,并从中生成一个新的数据帧,输出应该如下所示:

  dataframe index  rank of a
0                0          0
1                1          2
2                2          4
也就是说,对于
df1
而言,字母
a
位于第0个索引上,对于
df2
而言,字母
a
位于第2个索引上,依此类推。我想知道这是怎么做到的

我试着做:

ll = []
for i in lst:
    x = i[i['col1'].isin(['a'])]
    ll.append(x)
它提取了
a
的等级,然后我尝试了

lll = []
for i in ll:
    x = ll[i][0]
    lll.append(x)

这是行不通的,我认为我的方法通常不是最好的方法。

您可以通过一个简单的循环来完成dfs:

rank_a = []
for df in lst:
    rank_a.append(df[df.col1 == "a"].index[0])

# rank_a = [0,2,4]
其思想是过滤col1中带有“a”的行,并使用索引进行排名。上面的代码假设“a”始终是col1,所以取第一个。 只要dfs有默认索引,就可以了,如果没有,您可以随时重置索引

然后构建最终df:

rank_df = pd.DataFrame({
    "dataframe index": range(len(lst)),
    "rank of a": rank_a
})
尝试:

输出:

   df  rank_of_a
0   0          0
1   1          2
2   2          4
   df  rank_of_a
0   0          0
1   1          2
2   2          4