假设我有这个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"。请让我知道如何解决这个问题。谢谢! :)
答案 0 :(得分:1)
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
答案 1 :(得分:1)
略微程序化的方法,但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