如何解决筛选出仅在上一行中包含重复值的行
我正在将Python与pandas库一起使用。我有一个数据框df。我需要编写一个函数以过滤出重复项,也就是说,删除与上一行具有相同值的行
示例:
df = pd.DataFrame({'A': {0: 1,1: 2,2: 2,3: 3,4: 4,5: 5,6: 5,7: 5,8: 6,9: 7,10: 7},'B': {0: 'a',1: 'b',2: 'c',3: 'd',4: 'e',5: 'f',6: 'g',7: 'h',8: 'i',9: 'j',10: 'k'}})
我写了下面的代码。
total_len = len(df.index)
for i in range(total_len):
if df['A'].loc[i] == df['A'].loc[i+1]:
df['A'].drop(df['A'].index[i+1])
else:
df['A']
我在做什么错了?
解决方法
您的代码存在的问题是此df
的范围是0-10(11行)。但是,当您使用df['A'].loc[i+1]
时,当i = 10时,它将搜索i+1
行以与之比较,该行不存在。因此KeyError 11
total_len = len(df.index)
for i in range(total_len):
if df['A'].loc[i] == df['A'].loc[i+1]:
df['A'].drop(df['A'].index[i+1])
else:
df['A']
#ERROR
KeyError: 11
相反,解决此问题的更好方法是从第二行开始进行迭代,与之前的行进行比较,以获取标志True
和False
的列表。然后,您可以使用它来过滤df-
dup = [True]
total_len = len(df.index)
for i in range(1,total_len):
if df.iloc[i]['A'] == df.iloc[i-1]['A']:
dup.append(False)
else:
dup.append(True)
print(df[dup])
A B
0 1 a
1 2 b
3 3 d
4 4 e
5 5 f
8 6 i
9 7 j
,
您可以做到无循环
df = df[ # filter df with a boolean array
df.A.ne(df.A.shift()) # find out if elements are different from the row above
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。