如何在熊猫数据框中存储的数组中找到字符串的重复出现

时间:2018-08-13 09:58:02

标签: python python-3.x pandas

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

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

1 个答案:

答案 0 :(得分:0)

我已经处理过重新出现的内容,但没有进行过此编辑。希望有帮助。

初始化:

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)

就目前而言,我没有比这更好的了。我可能稍后再考虑。