我需要用第二列重新排列熊猫数据框:
colors numbers
0 red '1 - 49 ch'
1 white '10 - 490 ch'
3 blue '100 - 4900 ch'
4 green '2 - 3000 ch'
5 blue '10 - 4900 ch'
6 blue '1 - 49 ch'
此列包含我需要按第一个元素拆分和排序的字符串才能获得此结果:
colors numbers
0 red '1 - 49 ch'
1 blue '1 - 49 ch'
2 green '2 - 3000 ch'
3 white '10 - 490 ch'
4 blue '10 - 4900 ch'
5 blue '100 - 4900 ch'
如何遍历第二列以获得所需的结果?
for i in df['numbers']:
print(i.split(" - ")[0])
谢谢
答案 0 :(得分:2)
我们可以尝试提取数字并对其进行排序:
(df.join(df.numbers.str.extract('(\d+) - (\d+)').astype(int))
.sort_values([0,1], kind='mergesort')
.drop([0,1], axis=1)
)
输出:
colors numbers
0 red '1 - 49 ch'
6 blue '1 - 49 ch'
4 green '2 - 3000 ch'
1 white '10 - 490 ch'
5 blue '10 - 4900 ch'
3 blue '100 - 4900 ch'
答案 1 :(得分:2)
让我们尝试index_natsorted
中的natsort
from natsort import index_natsorted
df=df.iloc[index_natsorted(df.numbers)]
答案 2 :(得分:0)
如果要使用split,则可以使用:
添加新行。 df['numbers2']=df.numbers.str.split('-').str[0].astype('int')
然后在此新列上应用sort_values