Python Pandas - 移动行

时间:2017-05-05 07:49:50

标签: python pandas

我确信这可能很简单,但我不知道该怎么做。

我有一个包含4行的数据框(数据透视表),我们称之为A,B,C,D。

现在,我不希望它们按字母顺序排列,但我希望它们在B,C,A,D下降。

如何移动行?显然在Excel中我会剪切并粘贴它。我可以用Python做吗?

非常感谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()