优雅地将数据添加到Pandas。面板在运行模拟中

2024-10-03 00:16:38 发布

您现在位置:Python中文网/ 问答频道 /正文

免责声明

这是here的后续问题,我有一个pandas.Panel,其中有几个项目由pandas.DataFrames组成。我想在我的DataFrame(在Panel中的短轴)中只在一个命令中绘制一个特定的列,避免像 plt.plot(x, DataFrame1[y1]) plt.plot(x, DataFrame2[y1]) ... 作为一个答案,我可以在Panel中切换坐标轴,这样就不是一个包含一个数据集(具有某个起始参数的模拟)的所有信息的项目,而是所有不同模拟的一个信息(例如yvaluey1),而是将其他参数存储在其他项目中(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个或更多个值?在

例如,在我的问题mentioned before中,我将创建一个新的DataFrame,并将其附加到给定模拟的现有数据集中,类似于data.append(pd.DataFrame([[x, y1, y2, y3]], columns=['x', 'y1', 'y2', 'y3']))。但是从那里我不能用一个命令正确地绘制,而是必须手动为每个模拟添加一个新的图形。在

如果有人能帮助我理解如何构建这样一个Panel这样的“运行中”——从我之前的问题中我已经知道如何绘制一个:)


更新我被要求提供一些示例数据,但由于我希望连续地将模拟值添加到面板/项目中,而不是先生成列表,因此我只能展示数据最终的样子。开始时,面板应如下所示: ^{pr2}$

下面展示了模拟是如何工作的,以及例如y1项目最终应该是什么样子

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

我希望通过这件事,我现在更清楚我在寻找什么-如果不告诉我的话


Tags: 数据项目代码dataframepandasfordata参数
1条回答
网友
1楼 · 发布于 2024-10-03 00:16:38

我认为建立一个熊猫。面板将建立一个如下形式的词典:

d = {
    'items_axis_element0': DataFrame0,
    'items_axis_element1': DataFrame1,
    'items_axis_element2': DataFrame2,
    ...
}

现在您可以轻松构建面板:

^{pr2}$

您可以在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

相关问题 更多 >