我有以下运行良好的代码:
import pandas as pd
import numpy as np
X = pd.DataFrame({'CaseID':[1,1,2,2],
'col1': [1,2,1,2],
'col2': [1,1,2,2]})
X.set_index(['CaseID','col1'], inplace=True) #MultiIndex
Unique_Cases = X.index.levels[0]
print(Unique_Cases)
#[1, 2]
D = [X.loc[Case].values for Case in Unique_Cases]
print(np.array(D).shape)
#(2, 2, 1)
但是问题是我有5000万条记录,并且需要很多时间(10个小时)。 有更快的方法将2d大熊猫变成3d numpy数组吗?
len(X.loc[Case])
长度并不总是相同。
case_counts = X.CaseID.value_counts().to_frame('counts').sort_index()
case_counts['count_cumsum'] = case_counts.counts.cumsum()
#drop the last row for split
case_counts.drop(case_counts.tail(1).index,inplace=True)
cat_values = X[cat].values
cat_values = np.split(cat_values, case_counts.count_cumsum)
答案 0 :(得分:0)
解决方案是np.split:
case_counts = X.CaseID.value_counts().to_frame('counts').sort_index()
case_counts['count_cumsum'] = case_counts.counts.cumsum()
#drop the last row for split
case_counts.drop(case_counts.tail(1).index,inplace=True)
cat_values = X[cat].values
cat_values = np.split(cat_values, case_counts.count_cumsum)