python - 如何获取附加在列表中的多个数据帧的均值、标准和疯狂?
问题描述
我有数百个附加在列表中的数据框。所有数据框的列数相同,但行数不同。列名也相同。
所以我想取每列的列值的平均、疯狂、标准,我正在做这样的事情:
所有数据框都附加在列表中(lst)
lst = []
for filen, filen1 in zip(filelistn, filelist1):
df1 = 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+')
df2 = pd.read_table(path_to_files1+filen1, skiprows=0, usecols=(0,1,2,3,4,8),names=['wave','num','stlines','fwhm','EWs','MeasredWave'],delimiter=r'\s+')
dfs = pd.merge(df1,df2, on='wave', how='inner')
dfs = df1 - df2
lst.append(dfs)
df = reduce(lambda x, y: pd.merge(x, y, on = 'wave',how='outer'), lst)
df = df.rename(columns = lambda x: x.split('_')[0]).T
df = df.groupby(df.index).agg(['mean','std','mad','median']).T
但是我得到的结果有点奇怪,就像列mad
中的值一样21,65,36
,这是荒谬的。
wave mean median mad
0 4050.32 -0.016182 -0.011940 0.008885
1 4208.98 0.023707 0.007189 0.032585
2 4374.94 -0.001321 -0.001196 0.000378
3 4379.74 0.002778 0.003380 0.004685
4 6828.60 -10.604568 -0.000590 21.084799
5 6839.84 -0.003466 -0.001870 0.010169
6 6842.04 -32.751551 -0.002514 65.118329
7 6842.69 18.293519 -0.002158 36.385884
所有数据框中的列wave
都相同,但行数不同。这和那有关系吗?可能是在取错误行的平均值吗?
谁能告诉我如何解决这个问题?
解决方案
您可以使用pandas.concat
将数据帧序列连接成一个大数据帧,然后像这样计算统计信息。
import pandas as pd
# lst = [construct list of dataframes ...]
df = pd.concat(lst, axis=0)
means = df.mean()
stds = df.std()
编辑:如果您想按某个键分解统计信息,例如wave
,您可以使用以下内容。
means = df.groupby('wave').mean()
推荐阅读
- javascript - 如何在用户选择 php laravel 中的无线电输入时从字段中隐藏或显示?
- linux - 在 Ubunto Linux 中使用缓冲区文件运行命令时出错
- c - C中的对齐和填充
- php - 在线访问 xampp 服务器而不会被黑客入侵
- reactjs - 反应加载状态不显示
- reactjs - 通知用户新版本的 React App 可用的最佳实践?
- reactjs - 从 redux-thunk 获取租金时未定义租金?
- python - 使用窗口函数后无法理解时间的输出值?
- boost - Boost:named_mutex 是否需要磁盘 IO?
- spring - 使用 Spring Security 进行身份验证后,如何处理用户按下后退按钮?