这就是两个表的样子
5113.440 1 0.25846 0.10166 27.96867 0.94852 -0.25846 268.29305 5113.434129
5074.760 3 0.68155 0.16566 120.18771 3.02654 -0.68155 101.02457 5074.745627
5083.340 2 0.74771 0.13267 105.59355 2.15700 -0.74771 157.52406 5083.337081
5088.150 1 0.28689 0.12986 39.65747 2.43339 -0.28689 164.40787 5088.141849
5090.780 1 0.61464 0.14479 94.72901 2.78712 -0.61464 132.25865 5090.773443
那是另一张桌子
5113.450 1 0.25846 0.10166 27.96867 0.94852 -0.25846 268.29305 5113.434129
5074.769 3 0.68155 0.16566 120.18771 3.02654 -0.68155 101.02457 5074.745627
5083.350 2 0.74771 0.13267 105.59355 2.15700 -0.74771 157.52406 5083.337081
5088.520 1 0.28689 0.12986 39.65747 2.43339 -0.28689 164.40787 5088.141849
5090.820 1 0.61464 0.14479 94.72901 2.78712 -0.61464 132.25865 5090.773443
我知道我可以阅读它们,并且可以使用以下命令获取它们的平均值:
df1 = pd.read_table("with_blaze.ares",skiprows=0,usecols=(0,1,2,3,4,8),names=['wave','num','stlines','fwhm','EWs','MeasredWave'],delimiter=r'\s+')
df2 = pd.read_table("without_blaze.ares",skiprows=0,usecols=(0,1,2,3,4,8),names=['wave','num','stlines','fwhm','EWs','MeasredWave'],delimiter=r'\s+')
df = df1 + df2
但是我有几百个这样的表文件。所以我想知道如何才能一起阅读它们,然后取它们的平均值。而且所有文件中的行数都不相同,例如有些文件有600行,而另一些文件只有540行。那么我如何才能根据表中的第一列取行的平均值呢?
答案 0 :(得分:3)
将所有文件连接到单个DataFrame
中,然后使用wave
值分组并计算平均值。
import os
import pandas as pd
path_to_files = 'something'
lst = []
for filen in [x for x in os.listdir(path_to_files) if '.ares' in x]:
lst.append(pd.read_table(path_to_files+filen, skiprows=0, usecols=(0,1,2,3,4,8),
names=['wave','num','stlines','fwhm','EWs','MeasredWave'],
delimiter=r'\s+'))
df = pd.concat(lst, ignore_index=True)
# Calculate the average based on the first column
df.groupby('wave').mean()
根据您的评论,您可以首先对DataFrame进行排序,以便首先出现最高的值,然后删除重复项,从而仅留下stlines
最高值的行,每个{{ 1}}。只需将循环更改为:
wave