level 11
我的df里有一列数据是2023年8月、2023年9月、2023年10月...这样的字符串数据,我想用sort_values排序但是会变成10月、8月、9月这样,请问怎么让10月排到8月9月的后面
2023年07月24日 02点07分
1
level 13
你的数据是字符串,所以排序时会乱序。
你应该可以自定义排序规则。以下是一个gpt的回答:
要按照日期的顺序对字符串数据进行排序,您可以使用`sort_values`函数的`key`参数来自定义排序规则。以下是一个示例代码,可以将字符串数据按照日期顺序进行排序:
```python
import pandas as pd
# 创建一个包含字符串数据的DataFrame
df = pd.DataFrame({'date': ['2023年8月', '2023年9月', '2023年10月', '2023年11月']})
# 定义自定义排序规则的函数
def custom_sort(date_str):
month = int(date_str.split('年')[1].replace('月', ''))
return month
# 使用sort_values函数进行排序
df_sorted = df.sort_values(by='date', key=custom_sort)
# 打印排序后的结果
print(df_sorted)
```
这段代码中,我们首先创建了一个包含字符串日期数据的DataFrame。然后,我们定义了一个`custom_sort`函数,该函数将字符串日期转换为月份,并返回月份的整数值。最后,我们使用`sort_values`函数对DataFrame进行排序,通过`key`参数指定使用`custom_sort`函数进行排序。排序后,我们打印了排序结果。
这样,您就可以按照日期的顺序对字符串数据进行排序,确保10月排在8月和9月的后面。
2023年07月24日 03点07分
2
这个思路我明白了。再请问一下,我在排序时的索引是两个值,sort_vaues(by=['月份','负责人']),我要怎样让月份按照key=custom_sort排序,负责人按正常的拼音顺序排序?
2023年07月24日 03点07分
level 13
如果您想在排序时按照自定义的排序函数对"月份"列进行排序,并对"负责人"列按照正常顺序排序,可以使用`sort_values`函数的`key`参数和`sort_values`函数的`by`参数结合起来实现。
下面是一个示例代码:
```python
import pandas as pd
# 创建示例数据
df = pd.DataFrame({'月份': ['2023年8月', '2023年9月', '2023年10月', '2023年11月'],
'负责人': ['张三', '李四', '王五', '赵六']})
# 自定义排序函数
def custom_sort(date_str):
month = int(date_str.split('年')[1].replace('月', ''))
return month
# 对数据进行排序
df = df.sort_values(by=['月份', '负责人'], key={'月份': custom_sort})
# 打印排序后的结果
print(df)
```
这样,您就可以同时按照自定义排序函数对"月份"列进行排序,并对"负责人"列按照正常顺序排序。输出应该是:
```
月份 负责人
0 2023年8月 张三
1 2023年9月 李四
2 2023年10月 王五
3 2023年11月 赵六
```
请注意,这里的排序函数`custom_sort`假设所有日期字符串都是以"年"和"月"作为分隔符,并且月份部分是以数字的形式表示的。如果您的实际数据格式有所不同,您可能需要相应地修改自定义排序函数。同时,`key`参数是一个字典,其中键是要排序的列名,值是对应的排序函数。
2023年07月24日 04点07分
3
回复 Arctic :大佬,报错了,能帮忙看一下吗 typeerror: 'dict' object is not callable
2023年07月24日 04点07分
level 6
考虑使用pd.to_datetime把这一列转化为时间类型再进行sort
2023年07月24日 04点07分
5