按列值设置多重索引

时间:2016-12-18 23:01:46

标签: python pandas

我有一个包含列的数据框我希望通过在一列中对类似值的条目进行分组来制作多索引

A a 3
B c 2
A d 1
A e 4
B a 5

变为

A a 3
  d 1
  e 4
B c 2
  a 5

3 个答案:

答案 0 :(得分:2)

您可以将索引设置为前两列,然后对其进行排序。

# create data
df = pd.DataFrame({'col1': {0: 'A', 1: 'B', 2: 'A', 3: 'A', 4: 'B'},
                   'col2': {0: 'a', 1: 'c', 2: 'd', 3: 'e', 4: 'a'},
                    'col3': {0: 3, 1: 2, 2: 1, 3: 4, 4: 5}})
# set and sort index
df.set_index(['col1', 'col2']).sort_index(level=['col1', 'col2'])

输出

           col3
col1 col2      
A    a        3
     d        1
     e        4
B    a        5
     c        2

答案 1 :(得分:1)

为了讨厌而提供答案而不参考列名,因为没有给出

df.set_index(pd.MultiIndex.from_arrays(df.values[:, :2].T)).iloc[:, -1].sort_index()

A  a    3
   d    1
   e    4
B  a    5
   c    2
dtype: int64

那就是说,请选择@TedPetrou的答案。

答案 2 :(得分:0)

您可以将groupby与聚合函数一起使用:

df = df.groupby(['1', '2']).sum()

只需使用列名更改12