python - 检测相似的行并为熊猫数据框中的每个相同元素组创建列表
问题描述
我有一个包含 3 列的主要熊猫数据框。页面路径,页面浏览量,页面日期。我想检测具有相同页面路径的元素,并为具有相同页面路径的每一行制作单独的熊猫数据框。
会有很多组,但是在图像中,可以观察到 /news/AAL 和 /news/ZVO。但是,如果我们更详细地研究该列表,就会发现有很多组。我想不出一种方法来查找具有相同页面路径的行。
感谢您的帮助。
解决方案
你在正确的道路上。您只需要使用与过滤行相同的模式创建一个正则表达式捕获组()
,但使用所需的组周围。使用str.extract
withexpand=False
将第一个(也是唯一的)捕获组作为系列返回。然后,将此 Series 作为参数应用到groupby函数。此函数为这些组中的每一个返回单独的 pandas 数据帧,您可以通过 for 循环或使用groupByObj.get_group(groupName)
.
文件sample.csv用作输入
ga:pagePath, ga:pageviews, ga:pageDate
/news/AAL/1004553, 2958, 1612569600
/news/AAL/1004553, 9158, 1612569600
/news/BLX/2004553, 9258, 1612569600
...
...
/news/JKK/1005553, 4558, 1612569600
/news/ZZP/2034553, 7338, 1612569600
/news/ZZP/6004553, 9458, 1612569600
/news/ZZP/4004553, 8858, 1612569600
import pandas as pd
df = pd.read_csv("sample.csv")
print(df)
regex = r"^/news/([A-Z]{3})/.*"
groups = df["ga:pagePath"].str.extract(regex, expand=False)
page_groups = df.groupby(groups)
for groupName, dfGroup in page_groups:
print(f"------- {groupName} -------")
print(dfGroup)
page_groups的输出
------- AAL -------
ga:pagePath ga:pageviews ga:pageDate
0 /news/AAL/1004553 2958 1612569600
1 /news/AAL/1004553 9158 1612569600
------- BLX -------
ga:pagePath ga:pageviews ga:pageDate
2 /news/BLX/2004553 9258 1612569600
...
...
------- JKK -------
ga:pagePath ga:pageviews ga:pageDate
13 /news/JKK/2009553 1458 1612569600
14 /news/JKK/1005553 4558 1612569600
------- ZZP -------
ga:pagePath ga:pageviews ga:pageDate
15 /news/ZZP/2034553 7338 1612569600
16 /news/ZZP/6004553 9458 1612569600
17 /news/ZZP/4004553 8858 1612569600
推荐阅读
- sas - 满足条件时按组跳转到下一个
- oracle - 表中的Oracle列神秘地改变了值
- r - 如何将经纬度转换为 NASA 的缓动网格?
- vue.js - 为什么不显示 v-navigation-drawer 旁边的内容?
- xamarin.forms - 如何在 Xamarin Forms 中开发水平滚动日历?
- python - 瓶 + nginx:连接()失败(111:连接被拒绝)同时连接到上游
- c++ - 在 while 循环中使用 std::condition_variable::wait 是否正确?
- odoo - 使用 Odoo 开发人员界面使用来自另一个模型的值计算 many2many 字段
- angular - Angular Component Observable 绑定时间
- sql - 需要一些关于如何通知域用户 ASP.NET 或 SQL 的想法