通过取消我的多重索引,在groupby中设置sort=False

2024-04-28 20:20:12 发布

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

我正在尝试使用groupby而不使用任何类型。 但是,如果我将sort设置为false,我的多索引df将取消堆栈

sort = True(预期结果,排序问题除外):

         level_0                                                  
Friday    3M           -0.002532            12             0.666667
          6M           -0.002532            12             0.666667
Monday    3M            0.126991            12             0.833333
          6M            0.126991            12             0.833333
Thursday  3M            0.047767            13             0.461538
          6M            0.047767            13             0.461538
Tuesday   3M           -0.077558            14             0.285714
          6M           -0.077558            14             0.285714
Wednesday 3M            0.002976            13             0.615385
          6M            0.002976            13             0.615385

Sort = False:(级别0似乎已取消堆叠)

               total_returns  total_counts  positive_day_chance
          level_0                                                  
Monday    3M            0.126991            12             0.833333
Tuesday   3M           -0.077558            14             0.285714
Wednesday 3M            0.002976            13             0.615385
Thursday  3M            0.047767            13             0.461538
Friday    3M           -0.002532            12             0.666667
Monday    6M            0.126991            12             0.833333
Tuesday   6M           -0.077558            14             0.285714
Wednesday 6M            0.002976            13             0.615385
Thursday  6M            0.047767            13             0.461538
Friday    6M           -0.002532            12             0.666667

我想要sort=True的行为,不需要排序

以下是数据帧的代码:

import pandas as pd
print(pd.__version__) # 1.0xx

'''

            level_0  total_returns  total_counts  positive_day_chance  
Monday         3M       0.126991            12             0.833333   
Tuesday        3M      -0.077558            14             0.285714   
Wednesday      3M       0.002976            13             0.615385   
Thursday       3M       0.047767            13             0.461538   
Friday         3M      -0.002532            12             0.666667
Monday         6M       0.126991            12             0.833333   
Tuesday        6M      -0.077558            14             0.285714   
Wednesday      6M       0.002976            13             0.615385   
Thursday       6M       0.047767            13             0.461538   
Friday         6M      -0.002532            12             0.666667




'''

df = pd.read_clipboard()

print('sort: False', '\n')
print(df.groupby([df.index, 'level_0'], sort = False).sum())
print('sort: True', '\n')
print(df.groupby([df.index, 'level_0']).sum())

Tags: falsetruedf排序sortleveltotalpd
2条回答

看起来您希望按照自定义(即,非词典)顺序进行排序。t最好的方法是使用分类。在这种情况下,将其设置为CategoricalIndex并指定顺序,即:

weekdays = ["Monday", "Tuesday", "Wednesday","Thursday","Friday"]
df.index = pd.CategoricalIndex(df.index, categories=weekdays)

无论排序设置为什么,这个解决方案都会得到相同的结果

不清楚你想要什么。在数据帧中,每个(天,级别0)键只有一行

我更改了您的数据帧:

import pandas as pd
from io import StringIO
print(pd.__version__) # 1.0xx

s = '''
            level_0 total_counts  positive_day_chance
Monday        3M  1             0.8
Friday        3M  2             0.7
Monday        6M  3             0.6
Friday        6M  4             0.5
Monday        6M  5             0.4
Friday        3M  6             0.3
Friday        3M  7             0.2'''


df = pd.read_csv(StringIO(s), sep=r'\s+')

print('sort: False', '\n')
print(df.groupby([df.index, 'level_0'], sort = False).sum())
print('sort: True', '\n')
print(df.groupby([df.index, 'level_0']).sum())

0.24.2
sort: False 

                total_counts  positive_day_chance
       level_0                                   
Monday 3M                  1                  0.8
Friday 3M                 15                  1.2
Monday 6M                  8                  1.0
Friday 6M                  4                  0.5
sort: True 

                total_counts  positive_day_chance
       level_0                                   
Friday 3M                 15                  1.2
       6M                  4                  0.5
Monday 3M                  1                  0.8
       6M                  8                  1.0

Process finished with exit code 0

    

使用sort=False时,不会对(日期,级别0)组键进行排序,而使用sort=True时,可以看到所有Friday行,然后是Monday

另外,在我的示例中,您可以看到添加了列的值

相关问题 更多 >