我相信這可能很簡單,但我不知道該怎麼做。Python Pandas - 移動行數
我有4行的數據幀(透視表),讓調用它們A,B,C,D。
現在,我不想讓他們按字母順序排列,但我想他們作爲乙,C,A,D正在下降。
如何移動行?很明顯,在Excel中我只是剪切並粘貼它。我可以用Python做到嗎?
非常感謝
我相信這可能很簡單,但我不知道該怎麼做。Python Pandas - 移動行數
我有4行的數據幀(透視表),讓調用它們A,B,C,D。
現在,我不想讓他們按字母順序排列,但我想他們作爲乙,C,A,D正在下降。
如何移動行?很明顯,在Excel中我只是剪切並粘貼它。我可以用Python做到嗎?
非常感謝
使用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
由於直截了當的答案已經給出了已經,這裏是一個替代方法:使用categorical index。
cats = pd.Categorical(list('ABCD'), categories=['B','C','A','D'])
df = pd.DataFrame([1,2,3,4], index=cats)
df.sort_index()
我也會提到這一點。很高興你做到了。 – piRSquared
謝謝,總是很好有替代品:) – ScoutEU
啊啊,非常感謝你。一旦它允許我,我會盡快將您的答案標記爲正確。感謝您的速度如此之快:) – ScoutEU
@ScoutEU歡迎您。很高興我能幫上忙。 – piRSquared
感謝您花時間輸入額外的細節(對於我自己和其他可能會找到此頁的人),對我的學習非常有幫助。 – ScoutEU