python - 如何使用熊猫删除一行中多次出现的行
问题描述
我有这个数据:
A
1 1
2 1
3 1
4 2
5 2
6 1
我希望得到:
A
1 1
- - -> (drop)
3 1
4 2
5 2
6 1
我想删除 col ['A'] 中具有相同值的所有行,这些行出现在一行中,但没有第一个和最后一个。
直到现在我使用:
df = df.loc[df[col].shift() != df[col]]
但它也会删除最后一次出现。
对不起我的英语不好,提前谢谢。
解决方案
看起来你和这个问题有同样的问题:Pandas drop_duplicates。保持第一和最后。可能吗?.
建议的解决方案是:
pd.concat([
df['A'].drop_duplicates(keep='first'),
df['A'].drop_duplicates(keep='last'),
])
澄清后更新:
首先获取您描述的标准的布尔掩码:
is_last = df['A'] != df['A'].shift(-1)
is_duplicate = df['A'] == df['A'].shift()
并根据这些删除行:
df.drop(df.index[~is_last & is_duplicate]) # note the ~ to negate is_last
推荐阅读
- python - ValueError:尝试使用不受支持的类型转换值(无)(
) 到张量 - typo3 - TYPO3 TCA 内联向导
- discord.py - Discord.py status 不显示会员在线状态,而是显示离线
- docker - 本地主机上带有 Docker 运行器的 GitLab:如何将主机暴露给容器?
- c# - 字符串格式化和条件运算符
- r - R循环用选定列的平均值替换多列中的NA
- python - 了解在 Jupyter 中创建和导入的新模块
- python - macOS Big Sur 11.0.1 上未弹出应用程序
- swift - 在横向模式下如何通过向下滑动来关闭模式视图?
- python - Python根据句子列表中的特定条件剥离单词