从面板中的各种数据框绘制同一列 [英] Plotting the same column from various DataFrames in a Panel

查看:78
本文介绍了从面板中的各种数据框绘制同一列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我从模拟中获得了数据,该模拟给了我一些存储在DataFrame中的值(100行x 6列).对于不同的起始值,我将数据保存在面板中(2个数据框x 100行x 6列).

I've got data from a simulation which gives me some values stored in a DataFrame (100 rows x 6 columns). For varying starting values I saved my data in a Panel (2 DataFrames x 100 rows x 6 columns).

现在,我想比较两种模拟(名为"Sim1"和"Sim2"的数据框)中名为"A"的列的比较方式,一种方法是通过DataFrame.plot命令

Now I want to compare how the column named 'A' in both simulations (DataFrames named 'Sim1' and 'Sim2') compare and one way to do that is via the DataFrame.plot command

Panel['Sim1'].plot(x = 'xvalues', y='A')
Panel['Sim2'].plot(x = 'xvalues', y='A')
plt.show()

这行得通,但是我觉得应该可以以某种方式进行绘图,例如da数据位于可以像这样进行绘图的同一DataFrame中

This works, but I feel like it somehow should be possible to plot like da data was in the same DataFrame where I could plot like this

DataFrame.plot(x = 'xvalues', y = ['A1', 'A2'])

我丢失了什么东西吗,或者如果数据存储在面板中,仅用一个命令将两个图形简单地绘制成一个图形是不可能的吗?

Am I missing something or is it just impossible to simply plot the two graphs into one figure with one command if the data is stored in a Panel?

推荐答案

请考虑以下示例:

In [77]: import pandas_datareader.data as web

In [78]: p = web.DataReader(['AAPL','GOOGL'], 'yahoo', '2017-01-01')

In [79]: p.axes
Out[79]:
[Index(['Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close'], dtype='object'),
 DatetimeIndex(['2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
                '2017-01-13', '2017-01-17', '2017-01-18', '2017-01-19', '2017-01-20', '2017-01-23', '2017-01-24', '2017-01-25',
                '2017-01-26', '2017-01-27', '2017-01-30', '2017-01-31', '2017-02-01', '2017-02-02', '2017-02-03', '2017-02-06',
                '2017-02-07', '2017-02-08', '2017-02-09', '2017-02-10', '2017-02-13', '2017-02-14', '2017-02-15', '2017-02-16',
                '2017-02-17', '2017-02-21', '2017-02-22', '2017-02-23', '2017-02-24', '2017-02-27', '2017-02-28', '2017-03-01',
                '2017-03-02', '2017-03-03', '2017-03-06', '2017-03-07', '2017-03-08', '2017-03-09', '2017-03-10', '2017-03-13',
                '2017-03-14', '2017-03-15', '2017-03-16', '2017-03-17', '2017-03-20', '2017-03-21', '2017-03-22', '2017-03-23',
                '2017-03-24', '2017-03-27', '2017-03-28', '2017-03-29', '2017-03-30', '2017-03-31', '2017-04-03', '2017-04-04',
                '2017-04-05', '2017-04-06', '2017-04-07', '2017-04-10', '2017-04-11', '2017-04-12', '2017-04-13', '2017-04-17',
                '2017-04-18', '2017-04-19', '2017-04-20', '2017-04-21'],
               dtype='datetime64[ns]', name='Date', freq=None),
 Index(['AAPL', 'GOOGL'], dtype='object')]

In [80]: p.loc['Adj Close']
Out[80]:
                  AAPL       GOOGL
Date
2017-01-03  115.648597  808.010010
2017-01-04  115.519154  807.770020
2017-01-05  116.106611  813.020020
2017-01-06  117.401002  825.210022
2017-01-09  118.476334  827.179993
2017-01-10  118.595819  826.010010
2017-01-11  119.233055  829.859985
2017-01-12  118.735214  829.530029
2017-01-13  118.526121  830.940002
2017-01-17  119.481976  827.460022
...                ...         ...
2017-04-07  143.339996  842.099976
2017-04-10  143.169998  841.700012
2017-04-11  141.630005  839.880005
2017-04-12  141.800003  841.460022
2017-04-13  141.050003  840.179993
2017-04-17  141.830002  855.130005
2017-04-18  141.199997  853.989990
2017-04-19  140.679993  856.510010
2017-04-20  142.440002  860.080017
2017-04-21  142.270004  858.950012

[76 rows x 2 columns]

绘制它

In [81]: p.loc['Adj Close'].plot()
Out[81]: <matplotlib.axes._subplots.AxesSubplot at 0xdabfda0>

示例面板的不同切片/索引/选择的示例:

Examples of different slicing/indexing/selecting for the sample Panel:

In [118]: p
Out[118]:
<class 'pandas.core.panel.Panel'>
Dimensions: 6 (items) x 76 (major_axis) x 2 (minor_axis)
Items axis: Open to Adj Close
Major_axis axis: 2017-01-03 00:00:00 to 2017-04-21 00:00:00
Minor_axis axis: AAPL to GOOGL

按项目轴(索引):

In [119]: p.loc['Adj Close']
Out[119]:
                  AAPL       GOOGL
Date
2017-01-03  115.648597  808.010010
2017-01-04  115.519154  807.770020
2017-01-05  116.106611  813.020020
2017-01-06  117.401002  825.210022
2017-01-09  118.476334  827.179993
2017-01-10  118.595819  826.010010
2017-01-11  119.233055  829.859985
2017-01-12  118.735214  829.530029
2017-01-13  118.526121  830.940002
2017-01-17  119.481976  827.460022
...                ...         ...
2017-04-07  143.339996  842.099976
2017-04-10  143.169998  841.700012
2017-04-11  141.630005  839.880005
2017-04-12  141.800003  841.460022
2017-04-13  141.050003  840.179993
2017-04-17  141.830002  855.130005
2017-04-18  141.199997  853.989990
2017-04-19  140.679993  856.510010
2017-04-20  142.440002  860.080017
2017-04-21  142.270004  858.950012

[76 rows x 2 columns]

通过主轴:

In [120]: p.loc[:, '2017-01-03']
Out[120]:
             Open        High         Low       Close      Volume   Adj Close
AAPL   115.800003  116.330002  114.760002  116.150002  28781900.0  115.648597
GOOGL  800.619995  811.440002  796.890015  808.010010   1959000.0  808.010010

通过短轴:

In [121]: p.loc[:, :, 'GOOGL']
Out[121]:
                  Open        High         Low       Close     Volume   Adj Close
Date
2017-01-03  800.619995  811.440002  796.890015  808.010010  1959000.0  808.010010
2017-01-04  809.890015  813.429993  804.109985  807.770020  1515300.0  807.770020
2017-01-05  807.500000  813.739990  805.919983  813.020020  1340500.0  813.020020
2017-01-06  814.989990  828.960022  811.500000  825.210022  2017100.0  825.210022
2017-01-09  826.369995  830.429993  821.619995  827.179993  1406800.0  827.179993
2017-01-10  827.070007  829.409973  823.140015  826.010010  1194500.0  826.010010
2017-01-11  826.619995  829.900024  821.469971  829.859985  1320200.0  829.859985
2017-01-12  828.380005  830.380005  821.010010  829.530029  1349500.0  829.530029
2017-01-13  831.000000  834.650024  829.520020  830.940002  1288000.0  830.940002
2017-01-17  830.000000  830.179993  823.200012  827.460022  1439700.0  827.460022
...                ...         ...         ...         ...        ...         ...
2017-04-07  845.000000  845.880005  837.299988  842.099976  1110000.0  842.099976
2017-04-10  841.539978  846.739990  840.789978  841.700012  1021200.0  841.700012
2017-04-11  841.700012  844.630005  834.599976  839.880005   971900.0  839.880005
2017-04-12  838.460022  843.719971  837.590027  841.460022  1126100.0  841.460022
2017-04-13  841.039978  843.729980  837.849976  840.179993  1067200.0  840.179993
2017-04-17  841.380005  855.640015  841.030029  855.130005  1044800.0  855.130005
2017-04-18  852.539978  857.390015  851.250000  853.989990   935200.0  853.989990
2017-04-19  857.390015  860.200012  853.530029  856.510010  1077500.0  856.510010
2017-04-20  859.739990  863.929993  857.500000  860.080017  1186900.0  860.080017
2017-04-21  860.619995  862.440002  857.729980  858.950012  1168200.0  858.950012

[76 rows x 6 columns]


在您的情况下(取决于您的轴),您可能希望对面板进行不同的切片:


In your case (depending on your axes) you may want to slice your Panel differently:

Panel.loc[:, :, 'A'].plot()

这篇关于从面板中的各种数据框绘制同一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆