首页 > 解决方案 > 将 pandas 数据框对齐为面板

问题描述

我有 12 个形状相同的数据框,用于 12 年的数据收集。我需要将其用作面板来绘制时间序列轴(年)上的各种列值。因此,我认为我应该将这些框架对齐为面板。

  1. 有人可以帮助我如何将数据框对齐为面板吗?
  2. 这是为沿第三维绘图做准备的正确方法吗?

在此处输入图像描述

一些样本数据:

# for 2015
Grave Crimes    Cases Recorded  Mistake of Law fact
Abduction       725             3
Kidnapping      246             6
Arson           466             1
Mischief        436             1
House Breaking  12707           21
Grievous Hurt   1299            3

# for 2016
Grave Crimes    Cases Recorded  Mistake of Law fact
Abduction       738             4
Kidnapping      297             9
Arson           486             4
Mischief        394             1
House Breaking  10287           14
Grievous Hurt   1205            0

# for 2017
Grave Crimes    Cases Recorded  Mistake of Law fact
Abduction       647             2
Kidnapping      251             10
Arson           418             3
Mischief        424             0
House Breaking  8913            12
Grievous Hurt   1075            1

标签: pythonpandas

解决方案


假设您的 DataFrame 命名为 df15、df16、df17,您可以使用它们创建一个面板,如下所示:

pnl = pd.Panel({2015: df15, 2016: df16, 2017: df17})

之后,您可以按照以下方式制作您在问题中提到的 3D 图:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for i in range(2015, 2018):
    ax.bar(pnl.major_axis.values, pnl[i]['Cases Recorded'], zdir='y', zs=i)

ax.yaxis.set_ticks(range(2015, 2018))
ax.yaxis.set_ticklabels(range(2015, 2018))

数据的 3D 图示例

但是,如果我可以根据我自己的经验给你一个关于可读性好的数据可视化的提示,我认为许多专业人士都会分享:

即使数据集是 3 维或更多维结构,创建设计良好的 2 维图通常也是一个不错的选择。3D 可能经常引人注目,但要告知目标受众并显示数据的某些属性,您几乎会选择 2d。考虑到这一点,Ami Tavory 的方法将是更好的方法,因为这样数据结构更容易处理:

df15['year'] = 2015
df16['year'] = 2016
df17['year'] = 2017
df = pd.concat([df15, df16, df17]).set_index(['Grave Crimes', 'year'])

f, ax = plt.subplots(1)
for i, y in enumerate(range(2015, 2018)):
    data = df.groupby('year').get_group(y)['Cases Recorded']
    ax.bar(np.arange(6)+.2*i, data.values, width=.2, label=str(y))
ax.legend()
ax.set_xticklabels(data.index, rotation=15)

数据的二维图示例


推荐阅读