按列名称将数据框拆分为较小的数据框

Split dataframe into smaller dataframe by column Names

所以我正在做一个 Time series/LSTM 作业并且我有一个股票数据集:https://www.kaggle.com/camnugent/sandp500

问题是我需要按每个公司的名称将主数据框拆分成更小的数据框。有没有快速的方法来做到这一点?因为有几十个公司名称,我看到用iloc可以做到,但是太费力了。

df = pd.read_csv('all_stocks_5yr.csv', parse_dates=['date'])
df['date'] = pd.to_datetime(df['date'])

grouped_df = df.groupby('Name')

这里可以看得更清楚:

如你所见,有不同名称的不同公司,我想要的是每个公司的数据框。非常感谢帮助

这应该可以通过布尔索引来实现:

list_of_dataframes = [
    df[df.Name == name]
    for name
    in df.Name.unique()
]

假设这是您的数据框:

 Name  price
0   aal      1
1   aal      2
2   aal      3
3   aal      4
4   aal      5
5   aal      6
6   bll      7
7   bll      8
8   bll      9
9   bll      8
10  dll      7
11  dll     56
12  dll      4
13  dll      3
14  dll      3
15  dll      5

然后执行以下操作:

for Name, df in df.groupby('Name'):
    df.to_csv("Price_{}".format(Name)+".csv", sep=";")

这会将所有子数据帧保存为 csv。 查看代码的作用:

for Name, df in df.groupby('Name'):
    print(df)

returns:

Name  price
0  aal      1
1  aal      2
2  aal      3
3  aal      4
4  aal      5
5  aal      6
  Name  price
6  bll      7
7  bll      8
8  bll      9
9  bll      8
   Name  price
10  dll      7
11  dll     56
12  dll      4
13  dll      3
14  dll      3
15  dll      5

如果您需要在每个 df 中重置索引,请执行以下操作:

for Name, df in df.groupby('Name'):
    gf = df.reset_index()
    print(gf)

给出:

index Name  price
0      0  aal      1
1      1  aal      2
2      2  aal      3
3      3  aal      4
4      4  aal      5
5      5  aal      6
   index Name  price
0      6  bll      7
1      7  bll      8
2      8  bll      9
3      9  bll      8
   index Name  price
0     10  dll      7
1     11  dll     56
2     12  dll      4
3     13  dll      3
4     14  dll      3
5     15  dll      5