首页 > 解决方案 > 如何在存储在熊猫数据框中的数组中查找字符串的再次出现

问题描述

我有一个数据框,由字符串数组中的字符串值组成,如下所示。

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
....

标签: pythonpython-3.xpandas

解决方案


我已经处理了重新出现的东西,但没有处理这个编辑。希望有帮助。

初始化:

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)

目前,我没有比这更好的了。我以后可能会考虑。


推荐阅读