我有一个大数据框架,我通过使用pd.cut
创建了一个温度范围列。这很好。现在我想知道最小-最大值域列中的最小值域。因此,我可以使用这一列对数据框
进行排序我代码:
# Goal: sort below dataframe by the 'temp_range' columns
# The column should be sorted as '-60-50','-10-0','0-10','20-30'
xdf = pd.DataFrame(data={'temp_range':['-10-0','20-30','-60-50','0-10']})
xdf['Min. temp range']= xdf['temp_range'].apply(lambda x:x[:3])
xdf
目前的解决方案:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20-
2 -60-50 -60
3 0-10 0-1
预期的解决方案:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20
2 -60-50 -60
3 0-10 0
按最小温度范围列对期望的解决方案进行排序
xdf.sort_values('Min. temp range')
temp_range Min. temp range
0 -60-50 -60
1 -10-0 -10
2 0-10 0
3 20-30 20
使用str.extract
:
xdf['Min. temp range'] = xdf['temp_range'].str.extract('^(-?d+)')
输出:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20
2 -60-50 -60
3 0-10 0
regex演示
如果你不需要列,只想排序:
xdf.sort_values(by='temp_range', key=lambda s: pd.to_numeric(s.str.extract('^(-?d+)', expand=False)))
输出:
temp_range
2 -60-50
0 -10-0
3 0-10
1 20-30