gpt4 book ai didi

python - 按标签对多索引数据帧进行分组以计算平均值

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:03 26 4
gpt4 key购买 nike

我有一个生成 .csv 文件的随机算法。文件内容如下所示:

module, coverage, timestamp
examples.monkey, 32.142857142857146, 1546513589.59586
examples.monkey, 35.714285714285715, 1546513589.609822
examples.monkey, 35.714285714285715, 1546513589.617172
...
util.container, 27.586206896551722 ,1546513594.559889
util.container, 27.586206896551722 ,1546513594.579989
util.container, 27.586206896551722 ,1546513594.598491

我有 30 到 100 个这样的文件,平均长度为几千行。

我的最终目标是为每个测量绘制一个图表,并绘制一个额外的图表来描述给定时间所有测量的平均值。为此,我需要计算每个时间戳的所有运行的平均值。(当然,如果文件没有某个时间戳的条目,我会直接忽略它。)

到目前为止,我读取了所有 .csv 文件并将它们连接到一个新的数据框中。

allFiles = glob.glob("out/*.csv")
dfs = []

for file_ in allFiles:
df = pd.read_csv(file_, index_col=None, header=0)
dfs.append(df)

keys = ["Run " + str(i) for i in range(len(dfs))]
glued = pd.concat(dfs, axis=1, keys=keys)

这会产生如下所示的数据框:

             Run 0                 ...           Run 4              
module coverage ... coverage timestamp
0 examples.monkey 32.142857 ... 32.142857 1.546514e+09
1 examples.monkey 35.714286 ... 32.142857 1.546514e+09
2 examples.monkey 35.714286 ... 32.142857 1.546514e+09
3 examples.monkey 35.714286 ... 35.714286 1.546514e+09
4 examples.monkey 35.714286 ... 35.714286 1.546514e+09

现在我最初的想法是简单地对所有运行进行分组,按模块和时间戳在 level=1,跨轴=1 进行分组。像这样

grouped = glued.groupby(by=["module", "timestamp"], level=1, axis=1)

但是,这不起作用,因为我收到一个 Keyerror,说缺少模块和时间戳。显然,我对如何使用这样的组合数据框有一些误解。

那么,我如何最好地获取每个模块的平均覆盖率和跨多个文件的时间戳?

最佳答案

您可以使用 concat通过 axis=0 什么是默认参数,因此应该删除,然后将第一级转换为列 Run 并聚合 mean:

allFiles = glob.glob("out/*.csv")

#instead loop list comprehension, but your solution working nice too
dfs = [pd.read_csv(fp,skipinitialspace=True) for fp in allFiles]
keys = ["Run " + str(i) for i in range(len(dfs))]

glued = pd.concat(dfs, keys=keys).reset_index(level=0).rename(columns={'level_0':'Run'})
#convert float column to datetimes
glued['timestamp'] = pd.to_datetime(glued['timestamp'], unit='s')
#print (glued)

#specify columns what need
grouped = glued.groupby(by=["Run","module", "timestamp"], as_index=False).mean()
#print (grouped)

grouped1 = glued.groupby(by=["module", "timestamp"], as_index=False).mean()
#print (grouped1)

关于python - 按标签对多索引数据帧进行分组以计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54022412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com