按字母表然后按y排序数据帧python

2024-05-13 14:06:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图首先按字母顺序对下面的数据帧进行排序,在这个字母顺序内,我希望日期(mmddyear)按时间顺序排列。i、 e.我有这个数据框:

0 A11 01011997 
1 C11 07202005    
2 A12 02011997    
3 B12 12102001    
4 A13 10012000    
5 B11 11012001
6 A00 01101980

我想把它分类成这样:

^{pr2}$

这是我在python中使用的数据帧。在

sales = [('account', ['A11', 'C11', 'A12','B12','A13','B11']),
       ('date', [1011997, 7202005,2011997,12102001,10012000,11012001])
     ]
df = pd.DataFrame.from_items(sales)

我尝试了sales = sales.sort_values(by=['account']),并按字母顺序对所有内容进行排序。当我应用sales = sales.sort_values(by=['date'])时,一切都变得无序。在

有什么建议吗?在


Tags: 数据date排序顺序字母accountsortvalues
3条回答

您需要使用df.sort_values(['account', 'date'])对这两个字段进行排序。在

但是,当日期被表示为字符串或整数时,不能仅仅对数据帧进行排序,因为在许多情况下,您会得到错误的顺序,例如,integer 1011997在1021980之前排序,尽管后者表示1980年的日期。类似地,'01011997''01021980'之前排序。在

所以先把日期转换成datetimes。这里我假设date列包含字符串,因为示例数据表明了这一点。在

import pandas as pd

sales = [('account', ['A11', 'A11', 'C11', 'A12','B12','A13','B11']),
         ('date', ['01011997', '01021980', '07202005', '02011997', '12102001', '10012000', '11012001'])]
df = pd.DataFrame.from_items(sales)

>>> df.sort_values(['account', 'date'])
  account      date
0     A11  01011997
1     A11  01021980
3     A12  02011997
5     A13  10012000
6     B11  11012001
4     B12  12102001
2     C11  07202005

在本例中,第1行应该在第0行之前排序,但事实并非如此,因为该列是按字典顺序排序的。要修复将df['date']转换为数据类型datetime64的问题,请排序:

^{pr2}$

看起来是对的。在

您可以创建一个使日期值可排序的函数,然后在数据帧中创建一个临时列,同时对其进行排序,如下所示:

代码:

def date_val(date):
    """ make a sortable date from out format """
    monthday, year = divmod(date, 10000)
    return year * 10000 + monthday

# create a sorted data frame using a temp column
df_sorted = df.assign(sortval=df.date.apply(date_val)) \
    .sort_values(['account', 'sortval']).drop('sortval', 1)

测试代码:

^{pr2}$

结果:

  account      date
0     A11   1011997
2     A12   2011997
4     A13  10012000
5     B11  11012001
3     B12  12102001
1     C11   7202005

这应该做到:

df.sort_values(['account', 'date'])

您需要同时使用account和date对值进行排序。所以把它们放在一个list对象中,然后用它们对数据帧进行排序。在

相关问题 更多 >