我有一个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()
但是,我想要的是数据帧中这三列的平均分布,因此只有一行而不是三行。预先感谢!
答案 0 :(得分:1)
userNotificationCenter: didReceive: withCompletionHandler
是三个元素的列表。您在该行中的索引顺序:
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
中的'A'列来产生新的DataFrame
DataFrame
来工作。然后,它沿着该dflist
的行计算平均值。最后,它为DataFrame
编制索引,以仅保留选定的行(avg_df
)和“平均值”列。