gpt4 book ai didi

python - 比较行,然后在必要时取出行

转载 作者:行者123 更新时间:2023-11-30 22:57:03 25 4
gpt4 key购买 nike

我有一个示例数据框,如下所示。

df = pd.DataFrame({ 'Area' : ['1', '2', '3', '4','5', '6', '7', '8', '9', '10'],
'Distance' : ['19626207', '20174412', '20175112', '19396352',
'19391124', '19851396', '19221462', '20195112', '21127633', '19989793'],
})

Area Distance
0 1 19626207
1 2 20174412
2 3 20175112
3 4 19396352 # smaller, take out
4 5 19391124 #
5 6 19851396 #
6 7 19221462 #
7 8 20195112
8 9 21127633
9 10 19989793 #

“距离”列需要按升序排序。

但是数据帧的顺序是固定的(“区域”的顺序不可更改),

这意味着,如果行小于之前的行,则需要取出行。例如,这是我希望看到的结果。

  Area  Distance
1 19626207
2 20174412
3 20175112
8 20195112
9 21127633

我知道我可以尝试类似 for i in range(0, len(index), 1)...

但是有没有更简单的方法使用 pandas 来实现目标?

请问有什么提示吗?

最佳答案

更新2:这里是ayhan的解决方案将正常工作:

In [135]: df[df.Distance.astype("int64")>=df.Distance.astype("int64").cummax()]
Out[135]:
Area Distance
0 1 19626207
1 2 20174412
2 3 20174412
7 8 20195112
8 9 21127633

更新:

以下解决方案并不总是能正常工作,因为它会删除所有重复项。因此,如果您的原始 DF 中有重复的值,它们将会消失。

这是一个例子:

In [122]: df
Out[122]:
Area Distance
0 1 19626207
1 2 20174412 # duplicates
2 3 20174412 # they should BOTH be in the result set
3 4 19396352
4 5 19391124
5 6 19851396
6 7 19221462
7 8 20195112
8 9 21127633
9 10 19989793

In [123]: df.loc[df.Distance.cummax().drop_duplicates().index]
Out[123]:
Area Distance
0 1 19626207
1 2 20174412 # one duplicate has been dropped
7 8 20195112
8 9 21127633

PS我会尝试找到一个可行的解决方案

旧答案:

我不确定这是否是最有效的方法,但它确实有效:

In [94]: df.loc[df.Distance.cummax().drop_duplicates().index]
Out[94]:
Area Distance
0 1 19626207
1 2 20174412
2 3 20175112
7 8 20195112
8 9 21127633

说明:

In [98]: df.Distance.cummax()
Out[98]:
0 19626207
1 20174412
2 20175112
3 20175112
4 20175112
5 20175112
6 20175112
7 20195112
8 21127633
9 21127633
Name: Distance, dtype: object

关于python - 比较行,然后在必要时取出行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36849151/

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