从面板中的每个框架中提取一列
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
可能会更简单,因为它似乎是更常见的用例,因此记录得更好。
我有一个包含一些数据框的面板数据。它们都有一个名为 '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
可能会更简单,因为它似乎是更常见的用例,因此记录得更好。