Python 如何使用数据透视表对值和索引进行排序

Python 如何使用数据透视表对值和索引进行排序,python,pandas,Python,Pandas,提供这些数据: data = [{'Group1': 'A', 'Group2 date':'01/20/20', 'value1':0, 'value2':1}, {'Group1': 'A', 'Group2 date':'01/25/20', 'value1':0, 'value2':3}, {'Group1': 'A', 'Group2 date':'02/28/20', 'value1':0, 'value2':2}, {'Gro

提供这些数据:

 data = [{'Group1': 'A', 'Group2 date':'01/20/20', 'value1':0, 'value2':1},
         {'Group1': 'A', 'Group2 date':'01/25/20', 'value1':0, 'value2':3},
         {'Group1': 'A', 'Group2 date':'02/28/20', 'value1':0, 'value2':2},
         {'Group1': 'B', 'Group2 date':'01/25/20', 'value1':0, 'value2':1},
         {'Group1': 'B', 'Group2 date':'01/27/20', 'value1':2, 'value2':2},
         {'Group1': 'C', 'Group2 date':'01/29/20', 'value1':0, 'value2':5},
         {'Group1': 'C', 'Group2 date':'01/30/20', 'value1':2, 'value2':6}]
我使用熊猫创建了一个透视表,使用:

pivot = pd.pivot_table(
  df,
  index=["Group1", "Group2 date"],
  values=["value1", "value2"],
  aggfunc={"value1":np.sum, "value2":np.sum},
)
我得到一张这样的桌子:

                     value1  value2
Group1  Group2 date
A       01/20/20          0       1
        01/25/20          0       3
        01/28/20          0       2
B       01/25/20          0       1 
        01/27/20          2       2
C       01/29/20          0       5 
        01/30/20          2       6
但我需要首先将表按值2排序并具有最高值,然后将Group2 date始终降序以获得如下结果:

                     value1  value2
Group1  Group2 date
C       01/30/20          2       6
        01/29/20          0       5 
A       01/28/20          0       2
        01/25/20          0       3
        01/20/20          0       1
B       01/27/20          2       2
        01/25/20          0       1 

有可能吗?怎么可能?

这就是我可以得出的结论:让我知道它是否适合你。我使用了你的数据,只是在一个扁平的形式,因为我没有成功地在多索引中读取

data = '''

Group1  Group2_date value1  value2
A       01/20/20          0       1
A        01/25/20          0       3
A        01/28/20          0       2
B       01/25/20          0       1 
B        01/27/20          2       2
C       01/29/20          0       5 
C        01/30/20          2       6
   '''


df = pd.read_csv(StringIO(data), sep='\s+',engine='python')

#create a temp column, getting the max dates from each group

df['filler'] = df.groupby('Group1').Group2_date.transform('max')

#sort dataframe on filler and group1, so that the latest dates are at the top

df = df.sort_values(['filler','Group1'],ascending=False)

#list comprehension on a second groupby, this time using the filler and Group1
#note  the use of loc to flip the rows

M = [group.loc[::-1,] 
     for name, group in
     df.groupby(['filler','Group1'],sort=False)]

#concat and print result

outcome = pd.concat(M).drop('filler',axis=1)

    Group1  Group2_date value1  value2
6       C   01/30/20        2   6
5       C   01/29/20        0   5
2       A   01/28/20        0   2
1       A   01/25/20        0   3
0       A   01/20/20        0   1
4       B   01/27/20        2   2
3       B   01/25/20        0   1

是否也按组排序?group1列排序不重要。具有最高值2的group1行应位于顶部,并从下向下。Group2 date应该在每个group1中始终按降序排序。以group1-A为例:日期按降序排序,但值不是2,3,1。此外,我认为这里的解决方案应该会有所帮助:这些天的值是可以的,01/28/20应该是2,而另一天的值是相同的。值不能更改,只能更改行位置。不幸的是,您向我展示的解决方案对我没有帮助,我只是把结果放在后面。在末尾设置_index[Group1,Group2 date],inplace=True以获得我想要的结果,但我已经意识到,如果在同一个组1上有两行以上具有相同的组2日期,则不会像pivot_表那样将value1和value2考虑在内进行汇总