Вычислить средние значения столбца в списке pandas фреймов данных и распределения графика - PullRequest
0 голосов
/ 16 марта 2020

У меня есть список pandas фреймов данных, dflist, и я хотел бы построить среднее распределение из подмножества одного столбца в фреймах данных в dflist.

Вот код, который у меня пока есть:

import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


df1 = pd.DataFrame(np.random.rand(100, 6) , columns=list('ABCXYZ'))
df2 = pd.DataFrame(np.random.rand(100, 6) , columns=list('ABCXYZ'))
df3 = pd.DataFrame(np.random.rand(100, 6) , columns=list('ABCXYZ'))

dflist = [df1,df2,df3]

for i in np.arange(3):
    sns.distplot(dflist[i][70:90]['A'], bins=None, hist=True, kde=True, rug=False)
plt.show()

Это возвращает хороший сюжет: enter image description here

Однако, что я хочу среднее распределение этих трех столбцов во фреймах данных, так что есть только одна строка, а не три. Заранее спасибо!

1 Ответ

1 голос
/ 16 марта 2020

dflist - список из трех элементов. Ваш порядок индексации в строке:

dflist[70:90][i]['A']

неправильный, поскольку он пытается индексировать через DataFrame и сначала фильтровать строки, вызывая IndexError.

. Это индексирование будет работать так, как задумано, когда написано:

dflist[i][70:90]['A']

, который сначала выберет DataFrame, от df1 до df3, затем отфильтрует строки данных.

Для вашего Второй вопрос о том, как получить среднее распределение, как насчет следующего?

avg_df = pd.concat([df['A'] for df in dflist], axis=1)                          
avg_df["mean"] = avg_df.mean(axis=1)                                            

sns.distplot(avg_df.loc[avg_df.index[70:90], 'mean'], bins=None, hist=True, kde=True, rug=False)
plt.show()

Этот код работает путем создания нового avg_df DataFrame путем объединения столбцов 'A' из каждого DataFrame в ваш dflist. Затем он вычисляет среднее значение по строкам этого DataFrame. Наконец, он индексирует avg_df, чтобы сохранить только выбранные строки (70:90) и столбец 'mean'. Average distribution

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