2017-05-05 228 views
1

我相信這可能很簡單,但我不知道該怎麼做。Python Pandas - 移動行數

我有4行的數據幀(透視表),讓調用它們A,B,C,D。

現在,我不想讓他們按字母順序排列,但我想他們作爲乙,C,A,D正在下降。

如何移動行?很明顯,在Excel中我只是剪切並粘貼它。我可以用Python做到嗎?

非常感謝

回答

3

使用loc
loc允許你傳遞指行(列)與各個標籤的索引

df.loc[['B', 'C', 'A', 'D']] 

numpy
核矯枉過正...但速度更快

i = df.index.values 
v = df.values 
a = i.argsort() 
u = np.empty_like(a) 
r = np.arange(a.size) 
u[a] = r 
n = list('BCAD') 
pd.DataFrame(v[i[a].searchsorted(n)[u]], n, df.columns) 

定時
測試數據

df = pd.DataFrame(dict(A=range(4)), list('ABCD')) 

結果

%timeit df.loc[list('BCAD')] 
1000 loops, best of 3: 361 µs per loop 

%%timeit 
i = df.index.values 
v = df.values 
a = i.argsort() 
u = np.empty_like(a) 
r = np.arange(a.size) 
u[a] = r 
n = list('BCAD') 
pd.DataFrame(v[i[a].searchsorted(n)[u]], n, df.columns) 
10000 loops, best of 3: 135 µs per loop 
+0

啊啊,非常感謝你。一旦它允許我,我會盡快將您的答案標記爲正確。感謝您的速度如此之快:) – ScoutEU

+0

@ScoutEU歡迎您。很高興我能幫上忙。 – piRSquared

+0

感謝您花時間輸入額外的細節(對於我自己和其他可能會找到此頁的人),對我的學習非常有幫助。 – ScoutEU

2

由於直截了當的答案已經給出了已經,這裏是一個替代方法:使用categorical index

cats = pd.Categorical(list('ABCD'), categories=['B','C','A','D']) 
df = pd.DataFrame([1,2,3,4], index=cats) 
df.sort_index() 
+1

我也會提到這一點。很高興你做到了。 – piRSquared

+0

謝謝,總是很好有替代品:) – ScoutEU