python-3.x - python - 如何使用python在pandas数据框中的第一个连续重复值后删除?
问题描述
我有一个数据框
df=pd.DataFrame(['a','a','a','b','b','b','c','d','d','a','a' ,'b','b','e','f','d','d'])。
在这第一个连续的'a','b'和'd'值中我想保留。之后,如果出现任何重复值意味着我想删除它。
所以,现在我的预期输出是
['a','a','a','b','b','b','c','d','d','e','f']。
如果我使用
打印(df.drop_duplicates())
它删除所有重复的值。那么,如何获得我的预期输出?提前致谢。
解决方案
将每个值与其前一个值进行比较以找到每次运行的开始:
df['start'] = df[0] != df[0].shift()
对于每个组,使用cumsum
查找值的累积总和start
(利用 Pandas 将 True 视为 1 和 False 视为 0 的事实)。累积和可以作为一个组数:
df['group'] = df.groupby(0)['start'].cumsum()
然后选择第一组中的所有行(即第一次运行的值):
result = df.loc[df['group'] == 1]
import pandas as pd
df = pd.DataFrame(['a','a','a','b','b','b','c','d','d','a','a','b','b','e','f','d','d'])
df['start'] = df[0] != df[0].shift()
df['group'] = df.groupby(0)['start'].cumsum()
result = df.loc[df['group'] == 1]
print(df)
# 0 start group
# 0 a True 1.0
# 1 a False 1.0
# 2 a False 1.0
# 3 b True 1.0
# 4 b False 1.0
# 5 b False 1.0
# 6 c True 1.0
# 7 d True 1.0
# 8 d False 1.0
# 9 a True 2.0
# 10 a False 2.0
# 11 b True 2.0
# 12 b False 2.0
# 13 e True 1.0
# 14 f True 1.0
# 15 d True 2.0
# 16 d False 2.0
df = result[[0]]
print(df)
产量
0
0 a
1 a
2 a
3 b
4 b
5 b
6 c
7 d
8 d
13 e
14 f
推荐阅读
- swift - Swift String 的 count 属性时间复杂度
- python - 从父级导入到子级或从 python 包中的兄弟级导入时出现错误;
- python - Python 中的 SHAP 在使用 DeepExplainer 时是否支持 Keras 或 TensorFlow 模型?
- windows - 在 Windows 任务管理器中编辑启动进程
- laravel - 在 Google 联系人模板中的 Vuetify v-list 中定义路由器链接
- python - 如何添加带有标签的轴以供将来参考?
- ios - 如何在 Swift 5 中使用数组响应为 API 创建视图模型
- c# - 是否可以从 Web 服务器获取请求数据到控制台应用程序?
- webrtc - 如何在pubnub webrtc lib中获得没有cam的广播连接?
- c - 关于 fputs() 的困惑