不用操作即可打印出大熊猫分组

时间:2019-07-13 15:46:32

标签: python pandas pandas-groupby

所以我有以下熊猫数据框:

import pandas as pd
sample_df = pd.DataFrame({'note': ['D','C','D','C'], 'time': [1,1,4,6], 'val': [6,4,7,9]})

给出结果

    note  time  val
0   D     1     6
1   C     1     4
2   D     4     7
3   C     6     9

我想要的是

note  index   time  val
C     1        1    4
      3        6    9
D     0        1    6
      2        4    7

我尝试了sample_df.set_index('note',append=True),但没有用。

3 个答案:

答案 0 :(得分:2)

在第一级将DataFrame.swaplevelDataFrame.sort_index相加:

df = sample_df.set_index('note', append=True).swaplevel(1,0).sort_index(level=0)
print (df)
        time  val
note             
C    1     1    4
     3     6    9
D    0     1    6
     2     4    7

如果需要设置级别名称,请添加DataFrame.rename_axis

df = (sample_df.rename_axis('idx')
               .set_index('note',append=True)
               .swaplevel(1,0)
               .sort_index(level=0))
print (df)
          time  val
note idx           
C    1       1    4
     3       6    9
D    0       1    6
     2       4    7

或者:

sample_df.index.rename('old_index', inplace=True) 
sample_df.reset_index(inplace=True)
sample_df.set_index(['note','old_index'], inplace=True)
sample_df.sort_index(level=0, inplace=True)
print (sample_df)
                time  val
note old_index           
C    1             1    4
     3             6    9
D    0             1    6
     2             4    7

答案 1 :(得分:1)

我正在使用MultiIndex创建目标索引

sample_df.index=pd.MultiIndex.from_arrays([sample_df.note,sample_df.index])
sample_df.drop('note',1,inplace=True)
sample_df=sample_df.sort_index(level=0)
sample_df
        time  val
note             
C    1     1    4
     3     6    9
D    0     1    6
     2     4    7

答案 2 :(得分:0)

我将使用set_indexpop同时丢弃列“ note”并设置新索引

df.set_index([df.pop('note'), df.index]).sort_index(level=0)

Out[380]:
        time  val
note
C    1     1    4
     3     6    9
D    0     1    6
     2     4    7