这是来自here的后续问题,其中我有一个pandas.Panel
,其中有几个项目由pandas.DataFrames
组成。我想在一个命令中的每个项目的DataFrame
(Panel
中的minor_axis)中绘制某个列,避免像代码群一样
plt.plot(x, DataFrame1[y1])
plt.plot(x, DataFrame2[y1])
...
它作为一个答案,我可以在Panel
中切换我的轴,以便不是一个项目包含一个数据集的所有信息(具有某个起始参数的模拟),而只是一个信息(例如yvalue y1
)对于所有不同的模拟,将其他参数存储在其他项目中(DataFrames
)。
即使我的代码是模拟钟摆的行为,我也会将其分解为具有返回值y1-y3
而不是真实物理参数的通用模拟代码。该模拟将针对2个不同的起始参数k
进行。
import pandas as pd
data = pd.Panel(major_axis=[], minor_axis=['x', 'sim1', 'sim2'])
# some kind of simulation resulting in 3 simulated values and with a
# starting parameter for different simulation "strengths"
# not sure whether to use a list or dict here
ks = {'sim1' = 0.5, 'sim2' = 1.0}
for k in ks:
x, y1, y2, y3 = 0, 0, 0, 0
while x<100:
x += 1
y1 += 1*ks[k]*x
y2 += 2*ks[k]*x
y3 += 3*ks[k]*x
...
# for example the y2 value for the different k values should be plottable like this
data['y2'].plot()
现在我的问题是如何优雅地(尽可能少的代码行)将每个模拟的每个值添加/附加到data
,考虑到每个模拟可能有5个或更多个模拟具有10个或更多值步骤
E.g。在我的问题mentioned before中,我创建了一个新的DataFrame
并将其附加到我现有的数据集中以进行给定的模拟 - 类似于data.append(pd.DataFrame([[x, y1, y2, y3]], columns=['x', 'y1', 'y2', 'y3']))
。但是从那里我无法使用单个命令正确绘图,而是必须手动为每个模拟添加新图形。
如果有人可以帮助我了解如何在跑步中建立Panel
这样的话,我会很高兴 - 从我之前的问题我已经知道如何策划一个:)
<小时/> 更新我被问到一些示例数据,但由于我想连续将我的模拟值添加到Panel / item而不是先生成列表,我只能显示数据在结束。小组一开始应该是这样的:
In [1]: print(data)
Out[1]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 0 (major_axis) x 3 (minor_axis)
Items axis: y1 to y2
Major_axis axis: None
Minor_axis axis: x to sim2
下面显示了模拟的工作原理以及例如y1-item最终应该如何显示
In [2]: ks = {'sim1' : 0.5, 'sim2' : 1.0}
Out[2]: {'sim1': 0.5, 'sim2': 1.0}
In [3]:
for k in ks:
x, y1, y2 = 0, 0, 0
while x<3:
x += 1
y1 += 1*ks[k]*x
y2 += 2*ks[k]*x
# HERE is missing what I'm looking for
# it should append e.g. the y1 value to data['y1'] for both k
Out[3]: ...
In [4]: print(data['y1'])
Out[4]:
x sim1 sim2
0 1 0.5 1.0
1 2 1.5 3.0
2 3 3.0 6.0
我希望通过这个我现在更清楚我正在寻找 - 如果不让我知道
答案 0 :(得分:2)
我认为构建Pandas.Panel的简单方法是构建以下形式的字典:
d = {
'items_axis_element0': DataFrame0,
'items_axis_element1': DataFrame1,
'items_axis_element2': DataFrame2,
...
}
现在您可以轻松构建一个Panel:
p = pd.Panel(d)
您可以在Pandas Cookbook
中找到一些有用的示例更新:这是Pandas Cookbook的略微修改示例:
rng = pd.date_range('1/1/2013',periods=100,freq='D')
data = np.random.randn(100, 4)
cols = ['A','B','C','D']
df1, df2, df3 = pd.DataFrame(data, rng, cols), pd.DataFrame(data, rng, cols), pd.DataFrame(data, rng, cols)
pf = pd.Panel({'df1':df1,'df2':df2})
In [21]: pf
Out[21]:
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 100 (major_axis) x 4 (minor_axis)
Items axis: df1 to df2
Major_axis axis: 2013-01-01 00:00:00 to 2013-04-10 00:00:00
Minor_axis axis: A to D
现在我们可以添加df3
,如下所示:
In [22]: pf.join(pd.Panel({'df3':df3}))
Out[22]:
<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 100 (major_axis) x 4 (minor_axis)
Items axis: df1 to df3
Major_axis axis: 2013-01-01 00:00:00 to 2013-04-10 00:00:00
Minor_axis axis: A to D