重新排列第d行

2024-05-13 10:08:03 发布

您现在位置:Python中文网/ 问答频道 /正文

基于这个问题Can't Re-Order Columns Data,如何处理dataframe行?因为我有个问题,不是列顺序,而是行顺序

我的数据如下:

    B1  B2
B1  1   1
B10 1   1
B11 1   1
B12 1   1
B2  1   1
B20 1   1
B21 1   1
B22 1   1
B3  1   1
B30 1   1
B31 1   1

我的预期结果:

    B1  B2
 B1 1   1
 B2 1   1
 B3 1   1
B10 1   1
B11 1   1
B12 1   1
B20 1   1
B21 1   1
B22 1   1
B30 1   1
B31 1   1

Tags: re顺序ordercanb2b1b3b12
2条回答

你可以使用^{}

import natsort as ns
df.reindex(ns.natsorted(df.index))

     B1  B2
B1    1   1
B2    1   1
B3    1   1
B10   1   1
B11   1   1
B12   1   1
B20   1   1
B21   1   1
B22   1   1
B30   1   1
B31   1   1

或:

i=df.index.to_series().str.extract('(\d+)',expand=False).astype(float).sort_values().index
df.reindex(i)

您可以在排序函数中使用参数key,并将输出传递给^{}

df = df.reindex(sorted(df.index, key=lambda x: float(x[1:])))
print (df)
     B1  B2
B1    1   1
B2    1   1
B3    1   1
B10   1   1
B11   1   1
B12   1   1
B20   1   1
B21   1   1
B22   1   1
B30   1   1
B31   1   1

另一种方法是^{}数字,转换为浮点值并按^{}获取排序值的位置,按^{}获取最后更改顺序:

df = df.iloc[df.index.str.extract('(\d+)', expand=False).astype(float).argsort()]
print (df)
     B1  B2
B1    1   1
B2    1   1
B3    1   1
B10   1   1
B11   1   1
B12   1   1
B20   1   1
B21   1   1
B22   1   1
B30   1   1
B31   1   1

相关问题 更多 >