鉴于以下数据:
import pandas as pd
import io
df = pd.read_csv(
io.StringIO(
"bit,val\nbit_0,40.9\nbit_1,49.6\nbit_2,50.5\nbit_3,37.7\nbit_4,52.0\nbit_5,55.1\nbit_6,40.6\nbit_7,37.8\nbit_8,39.2\nbit_9,51.1\nbit_10,48.4\nbit_11,49.8\nbit_12,51.7\nbit_13,46.7\nbit_14,40.8\nbit_15,41.1\nbit_16,36.7\nbit_17,50.8\nbit_18,41.6\nbit_19,41.3\n"
)
)
df = df.sample(len(df), random_state=1).reset_index(drop=True)
看起来是:
bit val
0 bit_3 37.7
1 bit_16 36.7
2 bit_6 40.6
3 bit_10 48.4
4 bit_2 50.5
5 bit_14 40.8
6 bit_4 52.0
7 bit_17 50.8
8 bit_7 37.8
9 bit_1 49.6
10 bit_13 46.7
11 bit_0 40.9
12 bit_19 41.3
13 bit_18 41.6
14 bit_9 51.1
15 bit_15 41.1
16 bit_8 39.2
17 bit_12 51.7
18 bit_11 49.8
19 bit_5 55.1
我想根据尾随数字按bit
列对数据进行排序
如果这是一个标准的python列表,那么以下内容将起作用:
sorted(df["bit"].to_list(), key=lambda x: int(x.split("_")[-1]))
但我不确定如何将其应用于数据帧
使用
df.sort_values
和.str.split("_",expand=True)
并使用.astype(int)
强制转换为int,如下所示:输出:
如果需要重置索引,只需添加
.reset_index(drop=True)
:输出:
有熊猫>;=1.1.0,您可以像在sorted中一样使用
key
。在我的解决方案中,我按位列排序,但对于排序,我抛出了
bit_
:在
.sort_values()
上的文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html
尝试使用
natsort
相关问题 更多 >
编程相关推荐