Pandas循环遍历数据帧并使用while循环列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas循环遍历数据帧并使用while循环列表相关的知识,希望对你有一定的参考价值。

我正在尝试遍历列表和数据框,如果列表中的id等于数据框中的id,则对数据框中的该行执行某些操作。

import pandas as pd
data = [['a1','Alex',10],['a1','Bob',12],['a1','Clarke',13],['a2','den',14],['a2','emry',15]]
df = pd.DataFrame(data,columns=['id','Name','Age'])

unique_ids = ['a1','a2']

首先循环遍历列表。如果数据框中的id == unique_ids列表中的id,则执行以下操作:

  • 如果下一行中的唯一id仍然与之前的行相同,则将第二个参数设置为上一行中的最后一个值。因此,由于12是第一行中的最后一项,而a1仍然是与上面相同的id,所以将12设置为第二行中的第二个值。

例如:上面输入的预期输出将是

a1,10,12 
a1,12,13 
a2,14,15

我是怎么做到的:

for i in unique_ids:
    for row in df.itertuples(index=True, name='Pandas'):
        while i == getattr(row,"id"):
           print (getattr(row,"id"),getattr(row,"age")
           not sure how to proceed as im getting stuck at the while loop
答案

我想你可以通过跟踪最后一行的id来完成你想做的事情。

import pandas as pd
data = [['a1','Alex',10],['a1','Bob',12],['a1','Clarke',13],['a2','den',14],['a2','emry',15]]
df = pd.DataFrame(data,columns=['id','Name','Age'])

unique_ids = ['a1','a2']
last_id = df.iloc[0]['id']  # initilize to the first row's id
for idx, row in df[1:].iterrows():  
    if row['id'] in unique_ids and row['id'] == last_id:
        # You can retrieve last row by df.iloc[idx-1]
        print(row['id'], ",", df.iloc[idx-1]['Age'], ",", row['Age']) 
    last_id = row['id'] # update last_id

Output:
a1 , 10 , 12
a1 , 12 , 13
a2 , 14 , 15

以上是关于Pandas循环遍历数据帧并使用while循环列表的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历不同的数据帧并使用函数执行操作

循环遍历 Pandas 数据框以填充列表(Python)

循环遍历 pandas 列名以创建列表

Python / Pandas:循环遍历数字列表

循环遍历 pandas 数据框列中的列表元素以在新列中返回列表

Python:使用 while 或 for 循环遍历列表