根据连续行是否相似删除行 - Python

delete rows based on if consecutive rows are similar - Python

提问人:user3234242 提问时间:1/14/2022 最后编辑:user3234242 更新时间:1/14/2022 访问量:313

问:

我有这个数据框,想根据这组规则删除行。如果连续的行具有相同的“area”和“local”值,并且“group_name”不同,那么我想删除第一行:

df = pd.DataFrame()
df['time']  = pd.date_range("2018-01-01", freq = "s", periods = 10)
df['area'] = [1,1,1,2,2,2,3,3,4,4]
df['local'] = [1,1,1,1,2,2,2,2,2,2]
df['group_name'] = [1,1,2,2,2,3,3,3,4,4] 
df['value'] = [1,4,3,2,5,6,2,1,7,8]  

enter image description here

上图显示了表格,我想删除第 1 行和第 4 行。

我尝试在区域、本地和组名称的子集上使用,但这并不能保留我需要的所有唯一名称duplicated()

请帮帮我!

Python Pandas DataFrame numpy 数据操作

评论

2赞 1/14/2022
嗨,您尝试了什么作为代码?这样你就可以帮助这里的人更好地帮助你。就目前而言,你似乎在让其他人做所有的工作,这有点粗鲁,对吧?
0赞 JonSG 1/14/2022
这回答了你的问题吗?根据两列 A、B 从 DataFrame 中删除重复项,将行的最大值保留在另一列 C 中
0赞 user3234242 1/14/2022
@Neither 道歉。我尝试了一些代码,但迷路了。我会把它和问题一起上传
0赞 user3234242 1/14/2022
@JonSG 是的,这几乎就在那里,但我仍然想保留例如第 8 行和第 9 行,即使它们是重复的?如果不清楚,请告诉我
0赞 1/14/2022
完全不需要向我道歉:)我撤回了反对票。我想出了这个:我们形成你描述的 2 个面具:和 .当它们同时存在时,这是我们想要删除的一行;所以(是为了避免之后可能的 SettingWithCopyWarning)。但我不确定这是否通过了您想到的所有情况......m1 = df[["area", "local"]].diff().eq(0).all(axis=1).shift(-1)m2 = df["group_name"].diff().ne(0).shift(-1)Truenew_df = df[~(m1 & m2)].copy()copy

答:

0赞 Mohammad Khoshbin 1/14/2022 #1

你可以通过编写一些这样的 if 语句来做到这一点:

for i in range(len(df)-1):
    if df.loc[i]['local'] == df.loc[i+1]['local']:
        if df.loc[i]['area'] == df.loc[i+1]['area']:
            if df.loc[i]['group_name'] != df.loc[i+1]['group_name']:
                df.drop(i, inplace=True)