我有一个DataFrame
,其中包含路径,父路径和目录的大小。 但是,这里的问题是目录大小不包含sub-dirs的大小。这需要我在DataFrame
多次“扫描”并更新它。另一个问题是,当我向上移动时,我需要从底部开始并重新计算数据。
当前的DataFrame
看起来像是:
Parent Path Size
/ /a 10
/ /b 20
/a /a/x 1
/a /a/y 2
/a /a/z 3
/a/x /a/x/a1 99
我正在尝试计算以下内容:
Parent Path Size
/ /a 115 (sum of size of /a, /a/x)
/ /b 20
/a /a/x 100 (sum of size of /a/x and /a/x/a1)
/a /a/y 2
/a /a/z 3
/a/x /a/x/a1 99
基本上,更新从底部开始(即离开节点/目录)并涓流到顶级目录。我很难过如何从底部开始迭代数据帧并确保所有连续更新总是获取最新值?感谢任何想法,谢谢。
创建数据框的代码段:
txt = '''/ /a 10
/ /b 20
/a /a/x 1
/a /a/y 2
/a /a/z 3
/a/x /a/x/a1 99'''
rows = [ line.split() for line in txt.split('\n') ]
df = pd.DataFrame(data=rows, columns=['Parent', 'Path', 'Size'])
df['Size'] = df['Size'].astype(float)
答案 0 :(得分:2)
以下内容可能对您有用:确定每行的深度level
,自下而上迭代,并将Size
添加到parent
所标识的Path
。
df['level'] = df.Path.str.count('/')
for level in reversed(range(1, max(df.level) + 1)):
data = df[df.level==level]
for i, row in data.iterrows():
parent = '/'.join(row.Path.split('/')[:-1])
df.loc[df.Path == parent, 'Size'] += int(row.Size)
df
Parent Path Size level
0 / /a 115 1
1 / /b 20 1
2 /a /a/x 100 2
3 /a /a/y 2 2
4 /a /a/z 3 2
5 /a/x /a/x/a1 99 3