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逐行应用函数,速度肯定会慢一些。如果我不能直接分配单元格值,我个人会坚持使用联接。它们非常强大。好的,非常感谢!!