Python Dataframe 使用 pd.cut 范围列对数据框进行排序

huangapple go评论70阅读模式
英文:

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

regex demo

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

huangapple
  • 本文由 发表于 2023年4月6日 23:07:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/75951051.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定