Fou*_*ier 5 python dataframe pandas
我有两个包含不同值但结构相同的数据框:
df1 =
0 1 2 3 4
D 0.003073 0.014888 0.155815 0.826224 NaN
E 0.000568 0.000435 0.000967 0.002956 0.067249
Run Code Online (Sandbox Code Playgroud)
df2 =
0 1 2 3 4
D 0.746689 0.185769 0.060107 0.007435 NaN
E 0.764552 0.000000 0.070288 0.101148 0.053499
Run Code Online (Sandbox Code Playgroud)
我想在单个分组的条形图中绘制两个数据框。另外,每一行(索引)应该是一个子图。
对于其中之一,直接使用熊猫可以轻松实现:
df1.T.plot(kind="bar", subplots=True, layout=(2,1), width=0.7, figsize=(10,10), sharey=True)
Run Code Online (Sandbox Code Playgroud)
我尝试使用
pd.concat([df1, df2], axis=1)
Run Code Online (Sandbox Code Playgroud)
这将导致一个新的数据框:
0 1 2 3 4 0 1 2 3 4
D 0.003073 0.014888 0.155815 0.826224 NaN 0.746689 0.185769 0.060107 0.007435 NaN
E 0.000568 0.000435 0.000967 0.002956 0.067249 0.764552 0.000000 0.070288 0.101148 0.053499
Run Code Online (Sandbox Code Playgroud)
但是,使用上述方法绘制数据框不会将每列的条形分组,而是将它们分开处理。每个子图将产生一个x轴,其中x轴按列顺序重复,例如0,1,2,3,4,0,1,2,3,4。
有任何想法吗?
目前尚不清楚数据是如何组织的。Pandas 和seaborn 通常期望整洁的数据集。因为您在绘图之前转置了数据,所以我假设您有两个变量(A 和 B)和四个观察值(例如测量值)
df1 = pd.DataFrame.from_records(np.random.rand(2,4), index = ['A','B'])
df2 = pd.DataFrame.from_records(np.random.rand(2,4), index = ['A','B'])
df1.T
Run Code Online (Sandbox Code Playgroud)
也许这接近你想要的:
df4 = pd.concat([df1.T, df2.T], axis=0, ignore_index=False)
df4['col'] = (len(df1.T)*(0,) + len(df2.T)*(1,))
df4.reset_index(inplace=True)
df4
Run Code Online (Sandbox Code Playgroud)
使用seaborns 面网格可以方便地进行绘图:
sns.factorplot(x='index', y='A', hue='col', kind='bar', data=df4)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4007 次 |
| 最近记录: |