Python 在由不同数据帧组成的列表上迭代
假设我有一个由3个数据帧组成的列表,即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的秩,并从
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