我有一个包含12个Pandas Dataframe 的列表。每个 Dataframe 有94列。如何创建一个循环来创建94个新 Dataframe ?第一个新 Dataframe (为了简单起见,我们称之为DF1)应该在其第一列中具有dfs[1]['column 1']
,然后在其第二列中具有dfs[2]['column 1']
,第二新 Dataframe (df2)应该在其第一列中具有dfs[1]['column 2']
,然后在其第二列中具有dfs[2]['column 2']
,等等。
这意味着我可以将df1的每一列绘制到一个直方图上,然后将df2的每一列绘制到一个新的直方图上,等等,这样我就可以在最后绘制94个直方图(我自己可以简单地将每个新的 Dataframe 附加到一个列表中,然后通过 Dataframe 和列标题执行嵌套的for循环)
现在,我的代码生成了正确数量的直方图(94),但不是生成新的Pandas Dataframe ,而是将所有数据放在一个列表中。这意味着在每个图上,我无法区分同一图上的不同直方图,因为它们都是相同的颜色。
for i in range(94):
data = [] # store all i'th column data across all dfs
for df in dfs:
data.extend(list(df.iloc[:,i])) # i'th column
plt.hist(data, bins=50, histtype = 'step', label = dfs[0].iloc[:,i].name)
plt.title(dfs[0].iloc[:,i].name) # get name of column from 1st df
plt.xlabel(dfs[0].iloc[:,i].name) # get name of column from 1st df
plt.ylabel('Frequency Density')
plt.show()
dfs
是包含所有原始12个 Dataframe 的列表。
2条答案
按热度按时间3z6pesqy1#
我想到了一个比之前更好的答案,你可以用一个多索引来连接所有的 Dataframe ,并使用多索引来获得所有同名列的视图。
xqk2d5yq2#
您可能认为为了节省内存,避免同时构建所有94个新 Dataframe 是个好主意。但是,Pandas不需要复制底层数据(除非您希望这样做),因此新 Dataframe 可以简单地包含原始12个 Dataframe 的视图。
我在
pd.concat
中添加了关键字参数copy=False
,因为默认情况下,它会复制数据。下面是绘制新数据的代码