Среднее по данным - PullRequest
       0

Среднее по данным

2 голосов
/ 27 февраля 2020

Существует ли прямой способ получения среднего значения по нескольким фреймам данных (например, по нескольким прогонам симуляции)? Один из способов, который я использую, с 3-мя фреймами данных (df1, df2, df3), но не самый эффективный при наличии большого количества фреймов данных:

(df1+df2+df3)/3

Есть ли способ просто сказать Python сделать что-то более прямое, как mean(df1,df2,df3)?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2020

Чтобы избежать concat, можно преобразовать все данные в numpy массивы и использовать mean на axis=0, последний преобразовать вывод в DataFrame конструктор:

df1 = pd.DataFrame({
         'A':[4,5,4],
         'B':[7,8,90],
})

df2 = pd.DataFrame({
         'A':[4,50,4],
         'B':[7,8,9],
})

df3 = pd.DataFrame({
         'A':[40,5,4],
         'B':[7,8,9],
})

print ((df1+df2+df3)/3)
      A     B
0  16.0   7.0
1  20.0   8.0
2   4.0  36.0

dfs = [df1, df2, df3]
df = pd.DataFrame(np.array([x.to_numpy() for x in dfs]).mean(axis=0), 
                  index=df1.index, 
                  columns=df1.columns)
print (df)
      A     B
0  16.0   7.0
1  20.0   8.0
2   4.0  36.0

Для старика pandas изменение версии DataFrame.to_numpy на DataFrame.values:

df = pd.DataFrame(np.array([x.values for x in dfs]).mean(axis=0), 
                  index=df1.index, 
                  columns=df1.columns)
1 голос
/ 27 февраля 2020

Очевидно, что все ячейки данных содержат числовые данные c, если вычислить среднее значение следующим образом. Единственное улучшение, которое я могу придумать, - это использование numpy массивов.

import numpy as np

def df_mean(*dfs):
    return np.array([np.array(df) for df in dfs]).mean(axis=0)

df_mean(df1, df2, df3) # you can put as many dfs as arguments as you want.

Ах, @jezrael только что опубликовал ту же идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...