gpt4 book ai didi

python - 如何根据列条件的首次出现执行 groupby 并删除重复项?

转载 作者:行者123 更新时间:2023-12-02 16:05:48 24 4
gpt4 key购买 nike

这个问题对我来说有点难以理解,所以我希望我能在下面正确解释它。我有一个包含很多行但只有 3 列的数据框,如下所示:

data = {'line_group': [1,1,8,8,4,4,5,5], 
'route_order': [1,2,1,2,1,2,1,2],
'StartEnd':['20888->20850','20888->20850','20888->20850','20888->20850',
'20961->20960','20961->20960','20961->20960','20961->20960']}
df = pd.DataFrame(data)

enter image description here

最后,我想使用这些数据绘制点之间的路线,例如 20888 到 20850。但问题是有很多 trips/line_group 也经过这两个点,所以当我绘制东西时,它将重叠并且非常慢,这不是我想要的。

所以我只想要第一个具有唯一 StartEnd 的 line_group,如下面的数据框所示:

enter image description here

我相信它可能与 groupby 有关,就像我在下面的代码中尝试过的那样,但它没有产生我想要的结果。在完整的数据集中,路线顺序通常不仅仅是从一个点到另一个点,而且可以达到更多(例如 1,2,3,4,...)。

drop_duplicates(subset='StartEnd', keep="first")

最佳答案

按StartEnd分组,只保留第一个line_group值

然后过滤到包含唯一行组的行

unique_groups = df.groupby('StartEnd')['line_group'].agg(lambda x: list(x)[0]).reset_index()

StartEnd line_group
20888->20850 1
20961->20960 4

unique_line_groups = unique_groups['line_group']
filtered_df = df[df['line_group'].isin(unique_line_groups)]

最终输出

line_group  route_order StartEnd
1 1 20888->20850
1 2 20888->20850
4 1 20961->20960
4 2 20961->20960

关于python - 如何根据列条件的首次出现执行 groupby 并删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69444364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com