Python Pandas:使用正则表达式计算列中多个单词(字符串)的频率
所以我试着实现这个问题的答案: 但这不是我想要的 因此,让我尝试使用数据帧输出来解释该场景:Python Pandas:使用正则表达式计算列中多个单词(字符串)的频率,python,pandas,Python,Pandas,所以我试着实现这个问题的答案: 但这不是我想要的 因此,让我尝试使用数据帧输出来解释该场景: Date | Log 1 2012-02-02 02:10:01 | GET: /www/file1.php 2 2012-02-02 03:11:04 | GET: /www/img/file5.php 3 ... ... ... 这就是dataframe的外观,乍一看,您可以看出它是一个日志文件 无论如何,这就是我使用的正则表达
Date | Log
1 2012-02-02 02:10:01 | GET: /www/file1.php
2 2012-02-02 03:11:04 | GET: /www/img/file5.php
3 ... ... ...
这就是dataframe的外观,乍一看,您可以看出它是一个日志文件
无论如何,这就是我使用的正则表达式:\B./[\w./$-]+
(这很好地工作,不是问题)正则表达式只找到我想要的/file/path
我的目标是获得如下频率输出:
| /www/file1.php | /etc/gmn/file.css | http/trw/file.js
Date
2012-02-02 02:10:01 | 1 | 0 | 1
2012-02-02 03:11:04 | 0 | 1 | 1
2012-02-05 06:22:04 | 1 | 1 | 1
我的目标是统计每个文件发生的频率,然后能够调用这些文件(通过列名或其他选项)
正如您从这样的日志中了解到的,可能有数百个文件,但我需要知道每个文件出现的频率(在日志文件本身中)
了解最常调用的文件的频率将帮助我确定可以将哪些文件放在CDN上(这只是一个示例,说明我可以如何处理此类信息,以防有人认为这是毫无意义的-尽管我不想要一个不基于CDN的解决方案)
我尝试了一些不起作用的东西:
df.groupby('Date')['Log'].apply(lambda x: x[x.str.contains(r'\B./[\w./$-]+')].count())
任何其他建议(类似于上述建议)将不胜感激。pivot的经典案例。首先,让我们介绍一个count列,然后创建一个透视表。让我们忽略正则表达式,因为这不是问题所在;只需事先将其应用到柱上即可
df["Count"] = 1
df.pivot("Date", "Log", "Count").fillna(0)
如果有具有相同日期和日志的行(可能您稍后会删除,例如只保留日期,而不是时间),则需要首先分组
df.groupby(["Date", "Log"], as_index=False).sum().pivot("Date", "Log", "Count").fillna(0)
我认为我们需要了解更多关于您尝试的解决方案失败原因的详细信息。