【发布时间】:2018-04-17 16:45:33
【问题描述】:
您好,我是 python 新手,目前使用的是 python 3.x 版。我有大量需要在 csv 中过滤的数据。我在网上搜索,很多人建议将其加载到 pandas DataFrame 中(完成)。
我的列可以定义为:“ID”、“Name”、“Time”、“Token”、“Text”
我需要在“令牌”下检查是否有任何重复项 - 这可以通过
完成df = df[df.Token.duplicate(keep=False)]
(如有错误请指正)
但问题是,我需要保留原始行,同时删除其他重复项。为此,我被告知将其与“时间”进行比较。具有最小值的“时间”将是原始的(保留),而丢弃其余的重复项。
例如:
ID 名称时间标记文本
1 |约翰 | 333 |你好 | xxxx
2 |玛丽 | 233 | Hiiii | xxxx
3 |詹姆斯 | 222 |你好 | xxxx
4 |肯 | 555 |你好 | xxxx
期望的输出:
2 |玛丽 | 233 | Hiiii | xxxx
3 |詹姆斯 | 222 |你好 | xxxx
我做了什么:
##compare and keep the smaller value
def dups(df):
return df[df["Time"] < df["Time"]]
df = df[df.Token.duplicate()].apply(dups)
这大概就是我卡住的地方!任何人都可以帮忙吗?这是我第一次在 python 中编码,任何帮助将不胜感激。
【问题讨论】:
-
df = df.drop_duplicates(subset=['Token'], keep='first') -
订单在这里重要吗?如果没有,您可以对
Time... 进行排序,然后保证drop_duplicates保留最小的行。 -
@cᴏʟᴅsᴘᴇᴇᴅ Hellooo,谢谢您的快速回复,嗯,但据我所知(我可能错了)keep='first' 保留了第一个条目,但我有一千行和“时间”都是随机记录的,所以第一个条目可能有更高的值,有没有办法比较它(基于他们的“时间”)?所以我可以保留较小的值
-
就像我提到的,你可以做
df = df.sort_values('Time').drop_duplicates('Time', keep='first')
标签: python pandas csv dataframe duplicates