我有一个pandas dataframe df
id cons_id dist position
AAA AAA_1 -20 upstream
AAA AAA_2 -14 upstream
AAA AAA_3 -10 upstream
AAA AAA_4 20 downstream
AAA AAA_5 25 downstream
AAA AAA_6 30 downstream
BBB BBB_1 -30 upstream
BBB BBB_2 -24 upstream
BBB BBB_3 -7 upstream
BBB BBB_4 10 downstream
BBB BBB_5 35 downstream
BBB BBB_6 45 downstream
我希望输出能够在"上游"中选择最大数字的行。每个人的等级" id" "下游类"的第一行(使用相同的" id")与所选择的上游行具有至少40的dist。示例输出:
id cons_id dist position
AAA AAA_3 -10 upstream
AAA AAA_6 30 downstream
BBB BBB_3 -7 upstream
BBB BBB_5 35 downstream
我尝试使用iterrows迭代数据框并进行排序,分组并找到最小的错误。你能建议一个简单的方法吗?
答案 0 :(得分:0)
我会先通过选择正确的数据帧行,然后再进行排序/分组的组合来解决这个问题。
df2 = df[df['dist'] <= 40] # filter out rows greater than 40
df2.sort_values('dist').groupby(['id', 'position']).last().reset_index()
reset_index()
部分将删除分组创建的多索引。
此后,行和列的顺序会稍微混乱,因此您可能需要重新排序列并使用数据帧。