【问题标题】:DataFrame to DataPanel in Pandas / PythonPandas / Python中的DataFrame到DataPanel
【发布时间】:2016-09-08 20:34:19
【问题描述】:

我有一个如下所示的数据框:

    Name    Permits_13  Score_13    Permits_14  Score_14    Permits_15  Score_15
0   P.S. 015 ROBERTO CLEMENTE   12.0    284 22  279 32  283
1   P.S. 019 ASHER LEVY 18.0    296 51  301 55  308
2   P.S. 020 ANNA SILVER    9.0 294 9   290 10  293
3   P.S. 034 FRANKLIN D. ROOSEVELT  3.0 294 4   292 1   296
4   P.S. 064 ROBERT SIMON   3.0 287 15  288 17  291
5   P.S. 110 FLORENCE NIGHTINGALE   0.0 313 3   306 4   308
6   P.S. 134 HENRIETTA SZOLD    4.0 290 12  292 17  288
7   P.S. 137 JOHN L. BERNSTEIN  4.0 276 12  273 17  274
8   P.S. 140 NATHAN STRAUS  13.0    282 37  284 59  284
9   P.S. 142 AMALIA CASTRO  7.0 290 15  285 25  284
10  P.S. 184M SHUANG WEN    5.0 327 12  327 9   327

我想将它转换为数据面板结构作为这个问题Fixed effect in Pandas or Statsmodels的答案,这样我就可以使用具有固定效果的PanelOLS。

我的第一次尝试是进行这种转换:

df1 = df.ix[:,['Permits_13', 'Score_13']].T
df2 = df.ix[:,['Permits_14', 'Score_14']].T
df3 = df.ix[:,['Permits_15', 'Score_15']].T
pf = pandas.Panel({'df1':df1,'df2':df2,'df3':df3})

但是,一旦我没有关于时间的信息,这似乎不是正确的方法。此处,以 13、14 和 15 结尾的列依次代表 2013、2014 和 2015 年的观测值。

我是否必须为原始数据中的每一行创建一个数据框?

这是我第一次尝试使用 Pandas,如有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: python pandas dataframe panel-data


    【解决方案1】:

    DataFrame.to_panel() 的文档字符串说:

    将长(堆叠)格式(DataFrame)转换为宽(3D,Panel) 格式。

    目前DataFrame的索引必须是2级MultiIndex。 这可能会在以后推广

    这意味着你需要这样做:

    1. 堆叠您的数据框(因为它目前是“宽”,而不是“长”)
    2. 选择可以唯一定义数据框索引的两列
    3. 将这些列设置为您的索引
    4. 致电to_panel()

    那就是:

    df.stack().set_index(['first_col', 'other_col']).to_panel()
    

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 2014-11-02
      • 2016-06-26
      • 2018-01-09
      • 2016-08-11
      • 2021-04-14
      • 2013-06-14
      • 2018-04-09
      相关资源
      最近更新 更多