Как взять среднее, стандартное и безумное из-за нескольких фреймов данных, добавленных в список? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть несколько сотен фреймов данных, которые добавлены в список.Все кадры данных имеют одинаковое количество столбцов, но количество строк не одинаково.Имена столбцов также одинаковы.

Итак, я хочу взять среднее, безумное, стандартное значение столбца каждого столбца, и я делаю что-то вроде этого:

Все кадры данных добавляются в список (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 одинаково во всех фреймах данных, но количество строк - нет.Это как-то связано с этим?Может быть, он принимает среднее значение неправильных строк?

Может кто-нибудь сказать мне, как решить эту проблему?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...