按列名称将数据框拆分为较小的数据框
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
所以我正在做一个 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