如何按照两个不同dataFrame列进行排序?

2024-04-27 02:33:14 发布

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

我试图按此数据帧的两列进行排序,但我尝试过的方法没有成功。这可能是一个非常基本的答案。感谢您的帮助。你知道吗

import pandas
from pandas import DataFrame, Series

data = [
('product_a','1/31/2014',53)
,('product_b','1/31/2014',44)
,('product_c','1/31/2014',36)
,('product_a','2/28/2014',52)
,('product_b','2/28/2014',43)
,('product_c','2/28/2014',35)
,('product_a','3/31/2014',50)
,('product_b','3/31/2014',41)
,('product_c','3/31/2014',34) 
]

product_df = DataFrame( data, columns=['product_desc','activity_month','prod_count'] )

product_df['pct_ch'] = product_df.groupby('product_desc')['prod_count'].pct_change()

product_df = product_df.sort('activity_month','product_desc')

结果如下:

  product_desc activity_month  prod_count    pct_ch
6     product_a      3/31/2014         50 -0.038462
3     product_a      2/28/2014         52 -0.018868
0     product_a      1/31/2014         53       NaN
4     product_b      2/28/2014         43 -0.022727
7     product_b      3/31/2014         41 -0.046512
1     product_b      1/31/2014         44       NaN
2     product_c      1/31/2014         36       NaN
8     product_c      3/31/2014         34 -0.028571
5     product_c      2/28/2014         35 -0.027778

我想要的是:

  product_desc activity_month  prod_count    pct_ch
0     product_a      1/31/2014         53       NaN
3     product_a      2/28/2014         52 -0.018868
6     product_a      3/31/2014         50 -0.038462
1     product_b      1/31/2014         44       NaN
4     product_b      2/28/2014         43 -0.022727
7     product_b      3/31/2014         41 -0.046512
2     product_c      1/31/2014         36       NaN
5     product_c      2/28/2014         35 -0.027778
8     product_c      3/31/2014         34 -0.028571

我应该如何以不同的方式处理这类问题?你知道吗

更新: 我将activity\u month改为date并更新了排序逻辑,如下所示,仍然得到了没有正确输出的结果。你知道吗

product_df = product_df.sort(['activity_month','product_desc'])

  product_desc     activity_month  prod_count    pct_ch
0     product_a     2014-01-31         53       NaN
1     product_b     2014-01-31         44       NaN
2     product_c     2014-01-31         36       NaN
3     product_a     2014-02-28         52 -0.018868
4     product_b     2014-02-28         43 -0.022727
5     product_c     2014-02-28         35 -0.027778
6     product_a     2014-03-31         50 -0.038462
7     product_b     2014-03-31         41 -0.046512
8     product_c     2014-03-31         34 -0.028571

Tags: importdataframepandasdfdata排序countprod
1条回答
网友
1楼 · 发布于 2024-04-27 02:33:14

在对多个列进行排序时,sort()需要一个列列表(因此将列名包装在[]中),并且顺序很重要。您希望“product\u desc”作为排序中的第一个变量,“activity\u month”作为第二个变量:

>>> product_df.sort(['product_desc','activity_month'])

   product_desc activity_month  prod_count    pct_ch
0    product_a     2014-01-01          53       NaN 
3    product_a     2014-02-01          52 -0.018868
6    product_a     2014-03-01          50 -0.038462
1    product_b     2014-01-01          44       NaN
4    product_b     2014-02-01          43 -0.022727
7    product_b     2014-03-01          41 -0.046512
2    product_c     2014-01-01          36       NaN
5    product_c     2014-02-01          35 -0.027778
8    product_c     2014-03-01          34 -0.028571

相关问题 更多 >