提问人:user3234242 提问时间:1/14/2022 最后编辑:user3234242 更新时间:1/14/2022 访问量:313
根据连续行是否相似删除行 - Python
delete rows based on if consecutive rows are similar - Python
问:
我有这个数据框,想根据这组规则删除行。如果连续的行具有相同的“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]
上图显示了表格,我想删除第 1 行和第 4 行。
我尝试在区域、本地和组名称的子集上使用,但这并不能保留我需要的所有唯一名称duplicated()
请帮帮我!
答:
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)
评论
m1 = df[["area", "local"]].diff().eq(0).all(axis=1).shift(-1)
m2 = df["group_name"].diff().ne(0).shift(-1)
True
new_df = df[~(m1 & m2)].copy()
copy