Python 如何将iter中的行与数据帧的其余部分进行比较

Python 如何将iter中的行与数据帧的其余部分进行比较,python,pandas,loops,iteration,Python,Pandas,Loops,Iteration,我有一个像下面这样的数据框,里面有航班搜索结果的数据 search_id total_fare changes_airport abc 101 False abc 121 True abc 105 True abd 120 True 现在,我想添加一个名为“Alternations”的列,如果有另一行包含以下内容,则每行返回True: 相同的搜索id 总票价差小于10

我有一个像下面这样的数据框,里面有航班搜索结果的数据

search_id  total_fare  changes_airport
abc        101         False
abc        121         True
abc        105         True
abd        120         True
现在,我想添加一个名为“Alternations”的列,如果有另一行包含以下内容,则每行返回True:

  • 相同的搜索id

  • 总票价差小于10

  • 更改\u airport==错误

我试着说:

for index, row in df.iterrows():
    df.loc[row,'alternatives']=bool(dfs[(df.changes_airport==False)&_
    (df.search_id==row['search_id'])&_
    (df.total_fare<row['total_fare']+10)].shape[0])
对于索引,df.iterrows()中的行:
df.loc[row,'alternations']=bool(dfs[(df.changes\u airport==False)&_
(df.search\u id==行['search\u id'])&_

(df.total_fare这里有一个解决方案,假设原始数据帧命名为df:

import pandas as pd

# Group by id and find minimum value
df1 = df.groupby('search_id').min()

# Keep only id with changes_airport == False
df1 = df1[df1['changes_airport'] == False].reset_index()

# Merge the two data frames - creates additional columns in df2
df2 = pd.merge(df, df1, how='outer', on=['search_id'])

# Fill the new column based on the difference between current cell total_fare 
# and the minimum fare for the respective search_id
df2['alternatives'] = (df2['total_fare_x'] - df2['total_fare_y']) < 10

# Drop auxiliary columns
del df2['changes_airport_y'], df2['total_fare_y']

print(df2)

   changes_airport_x search_id  total_fare_x  alternatives
0              False       abc           101          True
1               True       abc           121         False
2               True       abc           105          True
3               True       abd           120         False
将熊猫作为pd导入
#按id分组并查找最小值
df1=df.groupby('search_id').min()
#仅保留带有更改的id\u airport==False
df1=df1[df1['changes\u airport']==False]。重置索引()
#合并两个数据帧-在df2中创建其他列
df2=pd.merge(df,df1,how='outer',on=['search\u id']))
#根据当前单元格总票价与当前单元格总票价之间的差异填写新列
#以及相应搜索id的最低费用
df2[“备选方案”]=(df2[“总票价”]-df2[“总票价”])<10
#下降辅助柱
del df2[“机场变更”]、df2[“总票价”]
打印(df2)
更改\u机场\u x搜索\u id总计\u票价\u x备选方案
0错误abc 101正确
1正确abc 121错误
2正确abc 105正确
3正确abd 120错误

总票价差小于10是什么意思?您能否发布上述示例df的预期输出?第三行应返回True,因为还有另一行(第1行)使用相同的搜索id,changes\u airport==False,105-101小于tenOk great。我只想颠倒前两个步骤。就为了运动,有没有办法用transform、np或iterrows执行相同的任务…?问题的棘手部分是,一列中单元格的值是根据另一列中另一个单元格的值确定的t row和column。我不确定这是否是使用您列出的命令来实现的。另一个问题是速度。iterrows逐行应用函数,速度肯定会慢一些。如果我不能直接分配单元格值,我个人会坚持使用联接。它们非常强大。好的,非常感谢!!