我有一个数据框,其中包含字符串数组中的字符串值,如下所示。
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
....
答案 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)
就目前而言,我没有比这更好的了。我可能稍后再考虑。