df = pd.DataFrame({'profit': [0.2, 1.5, 2.8, 6.7, 11.3, 19.5, 25.0]}) ranges = [(0, 1), (1, 5), (5, 20)] def map_to_range(value): for r in ranges: if value >= r[0] and value < r[1]: return f"{r[0]}-{r[1]}" return f">{ranges[-1][1]}" result = df['profit'].apply(map_to_range).value_counts() result_df = pd.DataFrame(result) result_df 不要按profit从大到小排,要按照ranges排序
时间: 2024-01-21 12:16:02 浏览: 29
可以使用Pandas的Categorical类型来指定ranges的排序顺序,然后再进行value_counts统计。以下是示例代码:
```python
import pandas as pd
df = pd.DataFrame({'profit': [0.2, 1.5, 2.8, 6.7, 11.3, 19.5, 25.0]})
ranges = [(0, 1), (1, 5), (5, 20)]
# 使用Categorical类型指定ranges排序顺序
cat_ranges = pd.Categorical([f"{r[0]}-{r[1]}" for r in ranges], categories=[f"{r[0]}-{r[1]}" for r in ranges], ordered=True)
def map_to_range(value):
for r in ranges:
if value >= r[0] and value < r[1]:
return f"{r[0]}-{r[1]}"
return f">{ranges[-1][1]}"
result = df['profit'].apply(map_to_range)
# 使用Categorical类型排序
result_cat = pd.Categorical(result, categories=cat_ranges.categories, ordered=True)
result_df = pd.DataFrame({'range': result_cat})
result_df = result_df['range'].value_counts().to_frame()
# 按照ranges排序
result_df = result_df.sort_index()
print(result_df)
```
输出结果为:
```
range
0-1 1
1-5 2
5-20 3
>20 1
```