python - 如何在存储在熊猫数据框中的数组中查找字符串的再次出现
问题描述
我有一个数据框,由字符串数组中的字符串值组成,如下所示。
date files
13/7 '['a.txt','b.txt','c.txt']'
14/7 '['b.txt','d.txt']'
15/7 '['e.txt','f.txt']'
16/7 '['a.txt','g.txt']'
17/7 '['c.txt','h.txt']'
所以“a.txt”出现在 16/7 行,类似于“b.txt”(17/7)和“c.txt”(17/7)。我想查找字符串中存在的所有值。
我试图找到遍历每个值的所有行,但这非常耗时。那么有没有更快的方法来做到这一点。
编辑:期望的输出是再次发生之间的总差异。因此,在这种情况下,a.txt 为 3 天,b.txt 为 1 天,c.txt 为 4 天。输出应该是 [3,1,4]/8 什么都可以。
date files difference
13/7 ['a.txt','b.txt','c.txt'] [3,1,4] or 8
....
解决方案
我已经处理了重新出现的东西,但没有处理这个编辑。希望有帮助。
初始化:
import pandas as pd
d = {
'date': ["13/7", "14/7", "15/7", "16/7", "17/7"],
'files': [
'[\'a.txt\',\'b.txt\',\'c.txt\']',
'[\'b.txt\',\'d.txt\']',
'[\'e.txt\',\'f.txt\']',
'[\'a.txt\',\'g.txt\']',
'[\'c.txt\',\'h.txt\']'
]
}
df = pd.DataFrame(data=d)
日期 :
如果您想要两次发生之间的天数差异,它可能会很有用。
df['date'] = pd.to_datetime(df['date'], format='%d/%m')
文件:
确定您在第二列中获得的每个文件:
import re
rg = r'\w*.txt'
df['separated_files']=df['files'].apply(lambda x:re.findall(rg,x))
allFiles = [item for sublist in df['separated_files'].values.tolist() for item in sublist]
allDistinctFiles = list(set(allFiles))
为每个文件添加出现列:
for file in allDistinctFiles:
df[file] = df['separated_files'].apply(lambda x : 1 if any((i for i in x if i.find(file) >= 0)) else 0)
目前,我没有比这更好的了。我以后可能会考虑。
推荐阅读
- sage - 不能将变量与向量的生成器相乘
- bash - 使用 SFTP 命令检查远程服务器上的现有目录
- push-notification - 如果 Chrome/Edge 浏览器以最大化模式打开,则不会显示电子应用程序的通知
- amazon-web-services - 为什么 EKS 集群会创建启动模板的克隆?
- python - 如何为内部字典键创建新列表或设置对象,以便不重复更新同一对象?
- java - 我怎样才能给对象升序号
- javascript - 表 getWeek 函数应在第 52 周后停止(javascript 日期)
- reactjs - 'withRouter' 不是从 'react-router-dom' 导出的
- css - 如何使视口相对字体大小响应 Safari 中的浏览器缩放?
- java - Weblogic/OpenJDK 11 错误 - “无法检查文件大小以确定块旋转”