gpt4 book ai didi

python - 使用 Pandas 删除数据框中具有不同连续值的行

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

我有以下数据框:

import pandas as pd
df = pd.DataFrame({"A":['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'], "M":[11,4,9,2,2,5,5,6,6]})

我的目标是删除 M 列的 2 个连续值彼此不相等的所有行。

因此,应删除第 0、1 和 2 行,因为 M 的值为:11!=4、4!=9 和 9!=2)。但是,如果 2 行具有相同的连续值,则必须保留:必须保留第 3 行和第 4 行,因为它们都具有值 2。对于具有值 5 的第 5 行和第 6 行的相同推理。

我能够通过使用以下代码行实现我的目标:

l=[]
for i, row in df.iterrows():
try:
if df["M"].iloc[i]!=df["M"].iloc[i+1] and df["M"].iloc[i]!=df["M"].iloc[i-1]:
l.append(i)
except:
pass
df = df.drop(df.index[l]).reset_index(drop=True)

你能建议一种更聪明、更好的方法来实现我的目标吗?也许通过使用一些内置的 pandas 函数?

数据框应该是这样的:

Before: 
A M
0 a 11 <----Must be removed
1 s 4 <----Must be removed
2 d 9 <----Must be removed
3 f 2
4 g 2
5 h 5
6 j 5
7 k 6
8 l 6

After
A M
0 f 2
1 g 2
2 h 5
3 j 5
4 k 6
5 l 6

最佳答案

使用boolean indexing使用由 shift 创建的 mask :

m = (df["M"].eq(df["M"].shift()) | df["M"].eq(df["M"].shift(-1)))
#alternative
#m = ~(df["M"].ne(df["M"].shift()) & df["M"].ne(df["M"].shift(-1)))
print (df[m])
A M
3 f 2
4 g 2
5 h 5
6 j 5
7 k 6
8 l 6

关于python - 使用 Pandas 删除数据框中具有不同连续值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46546379/

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