python - Pandas 使用 while 循环遍历数据框和列表

标签 python pandas while-loop

我试图循环遍历一个列表和一个数据帧,如果列表中的 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

关于python - Pandas 使用 while 循环遍历数据框和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47841428/

相关文章:

python - 将 MultiIndex 列合并为 1 级

python - Pandas : How to avoid fillna while resampling from hourly to daily data

linux - while 循环读取命令正在打印位置而不仅仅是文件名 - 这是为什么?

python - 带有OpenCV 3的OpenNI2

python - 附加到一个 python 字典键出于某种原因附加到所有

python - 如何使用Python在hotmail中发送邮件?

python - 按日期排序的Groupby序列,根据其他列值找到最小值,最大值

python - 如何按月份升序对 X 轴进行排序?

java - While 循环条件的问题

java - while 循环语句出现问题