【问题标题】:Compute averages of column in list of pandas data frames and plot distribution计算熊猫数据框列表中列的平均值并绘制分布
【发布时间】:2020-06-27 04:45:33
【问题描述】:

我有一个 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()

这会返回一个不错的情节:

但是,我想要的是数据框中这三列的平均分布,以便只有一行而不是三行。提前致谢!

【问题讨论】:

  • dflist 只有三个元素?我想你的意思是dflist[i][70:90]['A']

标签: python pandas numpy dataframe seaborn


【解决方案1】:

dflist 是三个元素的列表。您在该行中的索引顺序:

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

错误,因为它试图通过DataFrame 建立索引并首先过滤行,导致IndexError

当编写为以下内容时,此索引将按预期工作:

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

这将首先选择DataFrame,从df1df3,然后过滤数据行。

关于如何产生平均分布的第二个问题,以下如何?

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()

此代码通过将dflist 中每个DataFrame 的“A”列连接起来,生成一个新的avg_df DataFrame。然后它计算沿此DataFrame 行的平均值。最后,它索引avg_df 以仅保留选定的行(70:90)和“平均”列。

【讨论】:

  • 谢谢!我将编辑上面的问题,因为还有获得平均分布的剩余部分。
  • @JAG2024 更新了第二个问题的答案。
猜你喜欢
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2020-03-03
  • 2021-07-19
  • 1970-01-01
  • 2016-07-27
  • 2019-07-23
相关资源
最近更新 更多