根据pandas

时间:2016-02-18 03:27:35

标签: python pandas

我有一个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迭代数据框并进行排序,分组并找到最小的错误。你能建议一个简单的方法吗?

1 个答案:

答案 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()部分将删除分组创建的多索引。 此后,行和列的顺序会稍微混乱,因此您可能需要重新排序列并使用数据帧。