python - 如果两列中的连续值相同,如何在python中删除重复项?
问题描述
我有一个如下的数据框:
A B C
1 8 23
2 8 22
3 9 45
4 9 45
5 6 12
6 4 10
7 11 12
如果 C 也相同,我想删除在连续出现中保留第一个值的重复项。EG在这里出现'9'是B列是重复的,它们在'C'列中的相应出现也是重复的'45'。在这种情况下,我想保留第一次出现。
预期输出:
A B C
1 8 23
2 8 22
3 9 45
5 6 12
6 4 10
7 11 12
我尝试了一些分组,但不知道如何删除。
代码:
df['consecutive'] = (df['B'] != df['B'].shift(1)).cumsum()
test=df.groupby('consecutive',as_index=False).apply(lambda x: (x['B'].head(1),x.shape[0],
x['C'].iloc[-1] - x['C'].iloc[0]))
这个组返回给我一个系列,但我想放弃。
解决方案
添加DataFrame.drop_duplicates
2 列:
df['consecutive'] = (df['B'] != df['B'].shift(1)).cumsum()
df = df.drop_duplicates(['consecutive','C'])
print (df)
A B C consecutive
0 1 8 23 1
1 2 8 22 1
2 3 9 45 2
4 5 6 12 3
5 6 4 10 4
6 7 11 12 5
或者用|
for bitwise链接这两个条件OR
:
df = df[(df['B'] != df['B'].shift()) | (df['C'] != df['C'].shift())]
print (df)
A B C
0 1 8 23
1 2 8 22
2 3 9 45
4 5 6 12
5 6 4 10
6 7 11 12
推荐阅读
- ios - 在 SceneKit 中有没有办法不填充 UIBezierPath?
- javascript - 无法在 Material UI 中选中循环中的复选框
- c - 使用callstack在C中实现栈数据结构?
- c# - 在 .net 中访问 IBM Object Storage Aspera API
- openmpi - mpi4py irecv 导致分段错误
- json - 从scala中的jsArray中检索值
- javascript - JavaScript 是在源文件中定义然后编译的内置对象吗?
- c - 从 C 中的整数向量创建一个字符串
- azure - 将文件从手机复制到 ADLS gen2
- singlestore - memsql 使用 order by 显示缓慢的性能响应