将pandas面板转换为数据框。

3

我有一个pandas.Panel,我想创建一个pandas.DataFrame,其中列标题来自一个列,数据来自另一个列,行数等于面板中项目的数量。

如果用图表来描述我的需求...

我的面板看起来有点像下面这样:

      +---+---------+------------+------+
    +---+---------+------------+------+ |
  +---+---------+------------+------+ |-+
+---+---------+------------+------+ |-+ |
|   | context | iterations | time |-+ |-+
+---+---------+------------+------+ |-+ |
| 0 | foo     |          1 |   21 |-+ |-+
+---+---------+------------+------+ |-+ |
| 1 | bar     |          2 |   37 |-+ |-+
+---+---------+------------+------+ |-+
| 2 | baz     |          1 |   53 |-+
+---+---------+------------+------+

我希望将面板转换为数据框:
  • 数据框列标题是“上下文”列
  • 数据框值是“时间”列
  • 数据框中的行数是面板中项目的数量

结果应该类似于这样:

+---+-----+-----+-----+
|   | foo | bar | baz |
+---+-----+-----+-----+
| 0 |  21 |  37 |  53 |
+---+-----+-----+-----+
| 1 |  36 |  42 |  76 |
+---+-----+-----+-----+
| 2 |  24 |  56 |  83 |
+---+-----+-----+-----+
| 3 |  17 |  32 |  45 |
+---+-----+-----+-----+

你所说的“panel”是指pandas数据结构(即pd.Panel)吗?还是一组数据框的集合?如果它是一组数据框的集合,那么你是如何存储它们的?用列表吗? - ayhan
@ayhan 一个Pandas面板,我会在问题上进行澄清。 - Steve Lorimer
1
我不确定你的面板结构,但类似 pn.minor_xs('time').T 的东西应该可以工作。 - ayhan
2
你应该能够使用 to_frame() 方法将面板数据转换为多级索引的数据框:https://pandas.pydata.org/pandas-docs/stable/dsintro.html#conversion-to-dataframe 由于没有提供样本数据,无法进行测试。更一般地说,如果你阅读该链接中的其他内容,你会发现面板已被弃用,而推荐使用多级索引的数据框或 xarrays。 - JohnE
2
PlusOne4AsciiDiagram - piRSquared
顺便说一句,开始忘记 pandas.Panel() 是一个好主意,因为它已经被弃用了。http://pandas.pydata.org/pandas-docs/version/0.20/whatsnew.html#deprecate-panel - tagoma
1个回答

1

选项1
pd.concat

pd.concat({i: d.set_index('context').time for i, d in pn.iteritems()}).unstack()

context  foo  bar  baz
0         21   37   53
1         36   42   76
2         24   56   83
3         17   32   45

选项2
`pd.DataFrame`
pd.DataFrame([d.set_index('context').time for i, d in pn.iteritems()], pn.items)

context  foo  bar  baz
0         21   37   53
1         36   42   76
2         24   56   83
3         17   32   45

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接