英文:
Python Dataframe sort the dataframe using pd.cut range column
问题
我有一个大型数据框,并使用 pd.cut
创建了一个温度范围列。这是可以的。现在我想知道该最小范围在最小-最大范围列中的最小范围。这样,我可以使用此列对数据框进行排序。
我的代码:
# 目标:按 'temp_range' 列对以下数据框进行排序
# 列应按以下顺序排序:'-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
按照 Min. temp range 列对期望的解决方案进行排序:
xdf.sort_values('Min. temp range')
排序后的结果:
temp_range Min. temp range
2 -60-50 -60
0 -10-0 -10
3 0-10 0
1 20-30 20
英文:
I have a big dataframe and I created a temperature range column by using pd.cut
. This is fine. Now I want to know the minimum range in that min-max range column. So, I can use this column to sort the dataframe
My code:
# 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
Present solution:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20-
2 -60-50 -60
3 0-10 0-1
Expected solution:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20
2 -60-50 -60
3 0-10 0
Sort this expected solution by the Min. temp range column
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
答案1
得分: 2
使用 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
如果您不需要该列而只想排序:
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
英文:
Use str.extract
:
xdf['Min. temp range'] = xdf['temp_range'].str.extract('^(-?\d+)')
Output:
temp_range Min. temp range
0 -10-0 -10
1 20-30 20
2 -60-50 -60
3 0-10 0
If you don't need the column and just want to sort:
xdf.sort_values(by='temp_range', key=lambda s: pd.to_numeric(s.str.extract('^(-?\d+)', expand=False)))
Output:
temp_range
2 -60-50
0 -10-0
3 0-10
1 20-30
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论