You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中无循环移除pandas DataFrame中time列唯一的行?

如何在Pandas中移除指定列值唯一的行(无需循环)

我有如下结构的pandas.DataFrame:

timenum
1a,A 3
2a,B 3
3a,C 1
4b,A 4
5b,A 4
6a,B 3
7d,B 2

我希望移除数据集中time列值唯一的行,期望得到的结果如下:

timenum
2a,B 3
4b,A 4
5b,A 4
6a,B 3

请问是否存在无需使用循环的实现方式?


当然有啦!完全不用写循环,Pandas提供的向量化操作就能高效搞定这个需求。不过看你的示例数据和期望结果,推测你可能是笔误——你的time列每个值都是唯一的,如果真的移除time值唯一的行,结果会是空的。你实际应该是想移除num列值唯一的行(也就是保留num值重复出现的行),刚好和你的期望结果匹配,下面我两种情况都说明一下:

1. 保留num列重复的行(符合你的期望结果)

最简单的方法是用duplicated()方法,设置keep=False——这个参数会标记所有重复出现的行(包括第一次出现的),直接筛选这些行就可以:

import pandas as pd

# 构建你的示例数据
df = pd.DataFrame({
    'time': [1,2,3,4,5,6,7],
    'num': ['a,A 3', 'a,B 3', 'a,C 1', 'b,A 4', 'b,A 4', 'a,B 3', 'd,B 2']
})

# 筛选出num值重复的所有行
result = df[df['num'].duplicated(keep=False)]
print(result)

运行后就会得到你想要的结果:

timenum
2a,B 3
4b,A 4
5b,A 4
6a,B 3

如果你想更清晰地看到每个num值的出现次数,也可以用value_counts()配合isin()来实现:

# 获取出现次数大于1的num值列表
repeat_numbers = df['num'].value_counts()[df['num'].value_counts() > 1].index
# 筛选符合条件的行
result = df[df['num'].isin(repeat_numbers)]

这个方法和上面的效果完全一样,适合需要先查看重复值统计的场景。

2. 如果你确实要对time列操作(仅作参考)

如果你的time列存在重复值,要移除time值唯一的行,同样用duplicated(keep=False):

result = df[df['time'].duplicated(keep=False)]

不过你的示例数据里time列没有重复,所以这个操作会返回空的DataFrame。


内容的提问来源于stack exchange,提问作者Elham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:27