如何按id将pandas数据帧拆分为数据帧列表?

Сем*_*тов 1 python dataframe pandas

我有一个大熊猫数据框(大约 150000 行)。我尝试过方法 groupby('id') 但在返回组元组中。我只需要一个数据帧列表,然后将它们转换为 np 数组批次以放入自动编码器(例如https://www.datacamp.com/community/tutorials/autoencoder-keras-tutorial但 1D)

所以我有一个熊猫数据集:

data = {'Name': ['Tom', 'Joseph', 'Krish', 'John', 'John', 'John', 'John', 'Krish'], 'Age': [20, 21, 19, 18, 18, 18, 18, 18],'id': [1, 1, 2, 2, 3, 3, 3, 3]}  
# Create DataFrame  
df = pd.DataFrame(data)  
# Print the output.  
df.head(10)
Run Code Online (Sandbox Code Playgroud)

我需要相同的输出(只是一个熊猫数据框列表)。另外,我需要一个未排序列表的列表,这很重要,因为它的时间序列。

data1 = {'Name': ['Tom', 'Joseph'], 'Age': [20, 21],'id': [1, 1]}  
data2 = {'Name': ['Krish', 'John', ], 'Age': [19, 18, ],'id': [2, 2]}  
data3 = {'Name': ['John', 'John', 'John', 'Krish'], 'Age': [18, 18, 18, 18],'id': [3, 3, 3, 3]}  
pd_1 = pd.DataFrame(data1)
pd_2 = pd.DataFrame(data2)
pd_3 = pd.DataFrame(data3)
array_list = [pd_1,pd_2,pd_3]
array_list
Run Code Online (Sandbox Code Playgroud)

如何拆分数据帧?

Nk0*_*k03 5

或者你可以尝试:

array_list = df.groupby(df.id.values).agg(list).to_dict('records')
Run Code Online (Sandbox Code Playgroud)

Output

[{'Name': ['Tom', 'Joseph'], 'Age': [20, 21], 'id': [1, 1]},
 {'Name': ['Krish', 'John'], 'Age': [19, 18], 'id': [2, 2]},
 {'Name': ['John', 'John', 'John', 'Krish'],
  'Age': [18, 18, 18, 18],
  'id': [3, 3, 3, 3]}]
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果您需要数据框列表:

df_list = [g for _,g in df.groupby('id')]
#OR
df_list = [pd.DataFrame(i) for i in df.groupby(df.id.values).agg(list).to_dict('records')]
Run Code Online (Sandbox Code Playgroud)

重置每个数据帧的索引:

df_list = [g.reset_index(drop=True) for _,g in df.groupby('id')]
Run Code Online (Sandbox Code Playgroud)