簡體   English   中英

按子列將 Dataframe 拆分為多個 Dataframe

[英]Split Dataframe to multiple Dataframes by sub columns

我找不到一種優雅的方式來拆分這張桌子:

Open              Close                High 
 stock1 stock2     stock1 stock2        stock1 stock2
  ..     ..         ..      ..           ..     ..

股票是子列,分成多個表,每個表對應一個股票,所以第一個表是

df_stock1

   Open Close High

所以每個股票的表/數據框(可能> 2)然后返回這些dataframes的數組。

你可以做這樣的事情。 這是一個虛構的 dataframe:

import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame(np.random.randint(1, 10, (6, 6)),
                  columns=pd.MultiIndex.from_product([['Open', 'Close', 'High'],
                                                      ['Stock1', 'Stock2']]))

打印:

Open         Close          High       
  Stock1 Stock2 Stock1 Stock2 Stock1 Stock2
0      3      3      7      2      4      7
1      2      1      2      1      1      4
2      5      1      1      5      2      8
3      4      3      5      8      3      5
4      9      1      8      4      5      7
5      2      6      7      3      2      9

然后拆分您的多索引 df,使用 groupby 和 DataFrame.xs 執行以下操作:

Split = {idx: df_sub.xs(idx, level=1, axis=1) for idx,df_sub in df.groupby(level=1, axis=1)}
print(Split['Stock1'])

其中df_sub指的是多索引 df 的第一級。 這給出了:

 Open  Close  High
0     3      7     4
1     2      2     1
2     5      1     2
3     4      5     3
4     9      8     5
5     2      7     2

Split2 = {idx: df_sub.xs(idx, level=1, axis=1) for idx,df_sub in df.groupby(level=1, axis=1)}
print(Split2['Stock2'])

印刷:

 Open  Close  High
0     3      2     7
1     1      1     4
2     1      5     8
3     3      8     5
4     1      4     7
5     6      3     9

編輯其他級別

同樣,如果你想要所有的 Open 股票,你可以這樣做:

Split_open = {idx: df_sub.xs(idx, level=0, axis=1) for idx,df_sub in df.groupby(level=0, axis=1)}
print(Split_open['Open'])

返回:

   Stock1  Stock2
0       3       3
1       2       1
2       5       1
3       4       3
4       9       1
5       2       6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM