从面板中的每个框架中提取一列

Extracting a column from every Frame in a Panel

我有一个包含一些数据框的面板数据。它们都有一个名为 'N0' 的列。我想要一个包含每个面板的 N0 方法的数组。我做到了:

[np.mean(data.minor_xs('N0')[g]) for g in data]

但是好像太麻烦了。有没有更简洁的方法来提取 N0 列,例如 data['N0']?

您可以使用 pd.Panel.apply (see docs),如随机样本数据所示:

df1 = pd.DataFrame(np.random.randn(4, 2), columns=['A', 'B'])
df2 = pd.DataFrame(np.random.randn(4, 2), columns=['A', 'B'])
data = {'Item1': df1, 'Item2': df2}

df = pd.Panel(data)

<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 2 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: A to B

其中 DataFrame 如下所示:

                Item1     Item2
major minor                    
0     A     -0.572396  0.515488
      B      0.796982  0.726253
1     A      0.345817 -0.330810
      B     -2.516973  1.833602
2     A     -2.140583 -1.050717
      B      1.302233 -1.391122
3     A     -0.088435 -0.041199
      B      0.521575  0.618990

如下所示使用 .apply()DataFrame 的每个 column 提供 mean,示例说明了如何 select 仅 B .

df.apply(np.mean, axis='major').loc['B']

Item1    0.025954
Item2    0.446931
Name: B, dtype: float64

使用 MultiIndex DataFrame 可能会更简单,因为它似乎是更常见的用例,因此记录得更好。