熊猫:在Dataframe中存储Dataframe

问题描述 投票:1回答:3

我对Pandas很新,当前尝试在Dataframe中插入Dataframe时遇到了问题。

我想做什么:我有多个模拟和相应的信号文件,我希望所有这些都在一个大的DataFrame中。所以我想要一个DataFrame,它包含我的所有模拟参数以及我的信号作为嵌套的DataFrame。它应该看起来像这样:

SimName | Date | Parameter 1 | Parameter 2 |  Signal 1 |  Signal 2 |
Name 1  | 123  | XYZ         | XYZ         | DataFrame | DataFrame |
Name 2  | 456  | XYZ         | XYZ         | DataFrame | DataFrame |

其中SimName是我的大数据框索引,而信号1和信号2中的每个条目都是一个单独的数据框架。

我的想法是这样实现:

big_DataFrame['Signal 1'].loc['Name 1']

但这会导致ValueError:

与DataFrame不兼容的索引器

是否有可能在Pandas中拥有这个嵌套的DataFrame?

尼科

python pandas indexing nested
3个回答
0
投票

docs说只有Series可以在DataFrame内。然而,通过DataFrames似乎也有效。这是一个假设没有列在MultiIndex中的exaple:

import pandas as pd

signal_df = pd.DataFrame({'X': [1,2,3],
                          'Y': [10,20,30]}  )

big_df = pd.DataFrame({'SimName': ['Name 1','Name 2'],
                       'Date ':[123  , 456 ],
                       'Parameter 1':['XYZ', 'XYZ'],
                       'Parameter 2':['XYZ', 'XYZ'],
                       'Signal 1':[signal_df, signal_df],
                       'Signal 2':[signal_df, signal_df]}  )

big_df.loc[0,'Signal 1']
big_df.loc[0,'Signal 1'][X]

这导致:

out1:    X  Y
      0  1  10
      1  2  20
      2  3  30

out2: 0    1
      1    2
      2    3
      Name: X, dtype: int64

如果嵌套的数据帧不能正常工作,您可以实现某种存储在big_df中的指针,这些指针允许您访问存储在别处的信号数据帧。


0
投票

你应该使用而不是big_DataFrame['Signal 1'].loc['Name 1']

big_DataFrame.loc['Name 1','Signal 1']

0
投票

ns63sr's answer末尾提到的'指针'可以作为一个类来实现,例如......

定义:

class df_holder:
    def __init__(self, df): 
        self.df = df

组:

df.loc[0,'df_holder'] = df_holder(df)

得到:

df.loc[0].df_holder.df
© www.soinside.com 2019 - 2024. All rights reserved.