我有一个非常大的 CSV 数据集(9 亿条记录),它包含以下格式:
URL | IP | ActivityId
示例数据:
http://google.com/ | 127.0.0.1 | 2
http://google.com/ | 12.3.3.1 | 1
对于这种格式,我希望获得每个 URL 的所有唯一事件,这些事件不会出现在其他 URL 中。
例如,让我们在我上面提供的数据中再添加一个样本
http://yahoo.com/ | 123.4.5.1 | 2
现在 ActivityId 2 被完全排除,因为它属于两个 url:Google 和 Yahoo。所以我想要的是只找到属于单个 URL 的所有事件,并且我想知道它们属于哪个 URL。
我尝试做的事情:
创建字典
URL => set(activity1, activity2, ... , activityN)
(这部分比较慢,这里回答了Parse a very large CSV dataset)
使用这本字典,我将每个条目相互比较,发现集合之间的差异,并用差异结果更新相应的集合。
我怎样才能使用 pandas 完成我想要的事情?
最佳答案
另一种解决方案 nunique
:
df.groupby('ActivityId')['URL'].filter(lambda x: x.nunique() == 1)
更快的解决方案 transform
和 boolean indexing
:
df[df.groupby('ActivityId')['URL'].transform('nunique') == 1]
关于python - 从大型数据集中提取唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43889690/