熊猫删除特殊情况下的副本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熊猫删除特殊情况下的副本相关的知识,希望对你有一定的参考价值。
假设我有这个df:
Day Id Value
7 111 a
6 111 a
5 111 a
4 111 b
3 111 b
2 111 a
1 111 a
6 222 a
5 222 a
4 222 b
3 222 b
2 222 b
1 222 b
我想删除重复项以获得如下结果:(每次值切换时只保留行)
Day Id Value
5 111 a
3 111 b
1 111 a
5 222 a
1 222 b
我试过了:df = df.drop_duplicates(['Id','Value'],keep ='last')
Day Id Value
3 111 b
1 111 a
5 222 a
1 222 b
如你所见,我错过了“5 111 a”。请让我知道如何解决这个问题。谢谢! :)
答案
columns = ['Id','Value']
df[np.any(df[columns].shift(-1) != df[columns], axis=1)]
# Day Id Value
#2 5 111 a
#4 3 111 b
#6 1 111 a
#8 5 222 a
#12 1 222 b
另一答案
略微程序化的方法,但DYZ令人印象深刻。
df = pd.read_clipboard()
df['flag'] = df['Id'].astype(str) + "|" + df['Value']
df
Day Id Value flag
0 7 111 a 111|a
1 6 111 a 111|a
2 5 111 a 111|a
3 4 111 b 111|b
4 3 111 b 111|b
5 2 111 a 111|a
6 1 111 a 111|a
7 6 222 a 222|a
8 5 222 a 222|a
9 4 222 b 222|b
10 3 222 b 222|b
11 2 222 b 222|b
12 1 222 b 222|b
to_keep = []
for index, row in df.iterrows():
try:
next_val = df.iloc[index+1]['flag']
if row['flag'] != next_val:
to_keep.append(row)
except IndexError:
to_keep.append(row)
pd.DataFrame.from_records(to_keep)
Day Id Value flag
0 5 111 a 111|a
1 3 111 b 111|b
2 1 111 a 111|a
3 5 222 a 222|a
4 1 222 b 222|b
以上是关于熊猫删除特殊情况下的副本的主要内容,如果未能解决你的问题,请参考以下文章