python - 从数据框中删除指定的行
问题描述
如何删除有限数量的行?到目前为止,我的代码删除了我给出的每个实例。所以在下面的例子中,'dog' 的每个实例都被删除了。但是,我想删除指定数量的实例,例如只删除 2 个 dog 实例,如果要删除的实例是随机采样的,这也是一个好处。
num = [10, 20, 30, 10, 40, 50, 20, 60, 70, 20]
color = ['red', 'white', 'black', 'green', 'white', 'orange', 'white', 'black', 'blue', 'red']
animal = ['dog', 'cat', 'raccoon', 'gecko', 'bear', 'raccoon', 'dog', 'goat', 'goat', 'dog']
dict = {'Number': num, 'Color': color, 'Animal': animal}
df = pd.DataFrame(dict)
to_drop = ['dog']
trimmed_df = df[~df['Animal'].isin(to_drop)]
解决方案
你可以试试:
to_drop = ['dog']
s = df['Animal'].isin(to_drop)
mask = s & s.cumsum().le(2)
df[~mask]
输出:
Number Color Animal
1 20 white cat
2 30 black raccoon
3 10 green gecko
4 40 white bear
5 50 orange raccoon
7 60 black goat
8 70 blue goat
9 20 red dog
更新:如果to_drop
有多个标签并且您想在每个to_drop
标签中删除 2 个实例,您可以执行以下操作groupby().cumcount()
:
mask = (df['Animal'].isin(to_drop) &
df.groupby('Animal').cumcount().lt(2)
)
print(df[~mask])
推荐阅读
- cassandra - 卡桑德拉错误。在未过滤的分区中发现损坏的空行
- django - Django 2.2.6 (Python 3.6) + Apache + Ubuntu 18.04.3 错误
- java - 句子中的每个单词都大写
- c - ATSAMD51G19 帮助设置带时钟源的数字输出
- python - 具有年度时间序列的整个 Python/Pandas 数据帧的插补
- qt - 如何在 QML 中处理 Stylus/Pen 输入
- sql - 在没有 Sqlcmd 的情况下将 CSV 列导入 SQL 表
- php - PHPMailer - 如何计算成功发送消息的数量
- mongodb - 有没有办法可以在 mongodb 服务器空闲连接上设置超时?
- r - 错误:缺少一些必需的组件:prob?