2017-10-10 135 views
1

我有一個很大的數據框df其中我有一個完整列表indicesdf.index中的獨特元素。我現在想創建一個由indices中的元素索引的所有子數據框的列表;具體將熊貓數據幀拆分爲子數據框列表的最快方法

list_df = [df.loc[x] for x in indices] 

運行此命令正在儘管年齡(df有大約3e6行,3e3唯一索引)。這是一個合理的方式來執行此操作?我會很高興收到任何可以改善此類問題和相關問題的意見或建議。

在此先感謝!

+0

我會很高興,如果downvoter可以讓我知道如何改善我的問題。謝謝! –

回答

1

您可以通過索引使用列表中理解的groupby對象 - level=0sort=False改變默認的排序爲更快的解決方案:

L = [x for i, x in df.groupby(level=0, sort=False)] 

np.random.seed(123) 
N = 1000 
L = list('abcdefghijklmno') 
df = pd.DataFrame({'A': np.random.choice(L, N), 
        'B':np.random.randint(10, size=N)}, index=np.random.randint(100, size=N)) 

In [273]: %timeit [x for i, x in df.groupby(level=0, sort=False)] 
100 loops, best of 3: 9.91 ms per loop 

In [274]: %timeit [df.loc[x] for x in df.index] 
1 loop, best of 3: 417 ms per loop 
+0

感謝您的快速回復!如果此解決方案速度更快,我將嘗試一下。 –

+0

我在做一些測試,我編輯答案一會兒。 – jezrael

+0

謝謝,它大大加快!你能解釋爲什麼會發生? –