我试图为distplot子地块编写一个for循环。我有一个数据框,它有许多不同长度的列(不包括nan值)
fig = make_subplots(
rows=len(assets), cols=1,
y_title = 'Hourly Price Distribution')
i=1
for col in df_all.columns:
fig = ff.create_distplot([[df_all[[col]].dropna()]], col)
fig.append()
i+=1
fig.show()
我正在尝试为DistPlot的子图运行for循环,并得到以下错误:
情节错误:哎呀!您的数据列表或数据数组的长度应相同。
更新:以下是一个示例:
df = pd.DataFrame({'2012': np.random.randn(20),
'2013': np.random.randn(20)+1})
df['2012'].iloc[0] = np.nan
fig = ff.create_distplot([df[c].dropna() for c in df.columns],
df.columns,show_hist=False,show_rug=False)
fig.show()
我想在不同的子地块中绘制每个分布。
非常感谢。
1条答案
按热度按时间rjjhvcjd1#
你应该:
1.使用
pd.melt(df, id_vars=['index'], value_vars=df.columns[1:])
,2.并使用发生列
'variable'
为每个year
通过facet_row
参数以获取此信息:在下面的完整片段中,您将看到我已更改
'variable'
到'year'
为了使情节更直观。这种方法有一个特别方便的副作用,即运行dfm.dropna()
将删除na
价值2012
只有如果要在原始 Dataframe 上执行相同的操作,则同一行中的对应值2013
也将被删除。