python画熊猫代码_python-如何将熊猫多索引数据框绘制为3d

您可以使用Pandas绘制3D条形图,如下所示:

设定:

arrays = [[2010, 2010, 2010, 2011, 2011, 2011],['A', 'B', 'C', 'A', 'B', 'C']]

tuples = list(zip(*arrays))

index = pd.MultiIndex.from_tuples(tuples, names=['Year', 'Product'])

df = pd.DataFrame({'Sales': [111, 20, 150, 10, 28, 190]}, index=index)

print (df)

Sales

Year Product

2010 A 111

B 20

C 150

2011 A 10

B 28

C 190

数据整理:

import numpy as np

import pandas as pd

from mpl_toolkits.mplot3d import axes3d

import matplotlib.pyplot as plt

# Set plotting style

plt.style.use('seaborn-white')

对出现在“销售”列中的相似条目(get_group)进行分组,并对其进行迭代,然后再将它们附加到列表中.使用np.hstack将其水平堆叠,形成3d图的z尺寸.

L = []

for i, group in df.groupby(level=1)['Sales']:

L.append(group.values)

z = np.hstack(L).ravel()

让x和y维度上的标签都采用Multi-Index Dataframe各个级别的唯一值.然后,x和y尺寸取这些值的范围.

xlabels = df.index.get_level_values('Year').unique()

ylabels = df.index.get_level_values('Product').unique()

x = np.arange(xlabels.shape[0])

y = np.arange(ylabels.shape[0])

使用np.meshgrid从坐标向量返回坐标矩阵

x_M, y_M = np.meshgrid(x, y, copy=False)

3-D绘图:

fig = plt.figure(figsize=(10, 10))

ax = fig.add_subplot(111, projection='3d')

# Making the intervals in the axes match with their respective entries

ax.w_xaxis.set_ticks(x + 0.5/2.)

ax.w_yaxis.set_ticks(y + 0.5/2.)

# Renaming the ticks as they were before

ax.w_xaxis.set_ticklabels(xlabels)

ax.w_yaxis.set_ticklabels(ylabels)

# Labeling the 3 dimensions

ax.set_xlabel('Year')

ax.set_ylabel('Product')

ax.set_zlabel('Sales')

# Choosing the range of values to be extended in the set colormap

values = np.linspace(0.2, 1., x_M.ravel().shape[0])

# Selecting an appropriate colormap

colors = plt.cm.Spectral(values)

ax.bar3d(x_M.ravel(), y_M.ravel(), z*0, dx=0.5, dy=0.5, dz=z, color=colors)

plt.show()

avlF3.png

注意:

如果groupby对象不平衡,您仍然可以通过堆叠来实现

并用0填充Nans,然后将其堆叠回去,如下所示:

df = df_multi_index.unstack().fillna(0).stack()

其中df_multi_index.unstack是您的原始多索引数据框.

对于添加到多索引数据框中的新值,将获得以下图表:

B5EpL.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值