在pandas中按元素查找元素是一項昂貴的操作,是以按索引進行對齊.我會将所有内容讀入數組,建立值的DataFrame,然後直接設定層次結構索引.如果你可以避免追加或查找通常會快得多.
下面是一個示例結果,假設您有一個資料集2-D數組,其中包含所有内容:
In [106]: dataset
Out[106]:
array([[1, 1, 0, 1],
[1, 1, 1, 2],
[1, 2, 1, 3],
[1, 2, 2, 4],
[2, 1, 0, 5],
[2, 1, 2, 6]])
In [107]: pd.DataFrame(dataset,columns=['A','B','C', 'data']).set_index(['A', 'B', 'C'])
...:
Out[107]:
data
A B C
1 1 0 1
1 2
2 1 3
2 4
2 1 0 5
2 6
In [108]: data_values = dataset[:, 3]
...: data_index = pd.MultiIndex.from_arrays( dataset[:,:3].T, names=list('ABC'))
...: pd.DataFrame(data_values, columns=['data'], index=data_index)
...:
Out[108]:
data
A B C
1 1 0 1
1 2
2 1 3
2 4
2 1 0 5
2 6
In [109]: %timeit pd.DataFrame(dataset,columns=['A','B','C', 'data']).set_index(['A', 'B', 'C'])
%%timeit
1000 loops, best of 3: 1.75 ms per loop
In [110]: %%timeit
...: data_values = dataset[:, 3]
...: data_index = pd.MultiIndex.from_arrays( dataset[:,:3].T, names=list('ABC'))
...: pd.DataFrame(data_values, columns=['data'], index=data_index)
...:
1000 loops, best of 3: 642 µs per loop