【问题标题】:Extracting a column from every Frame in a Panel从面板中的每一帧中提取一列
【发布时间】:2024-01-01 10:00:01
【问题描述】:

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

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

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

【问题讨论】:

  • 请显示面板数据的结构。它是数据框列表吗?带有面板指标的堆叠式大数据名声?我看到groupby() 的好候选人。

标签: python pandas panel


【解决方案1】:

您可以使用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() 如下为每个column 提供mean DataFrame,示例说明了如何仅选择B

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

Item1    0.025954
Item2    0.446931
Name: B, dtype: float64

改用 MultiIndex DataFrame 可能更简单,因为它似乎是更常见的用例,所以文档记录更好。

【讨论】:

    最近更新 更多