如何以列表的形式获取熊猫MultiIndex的值?

时间:2018-07-23 11:55:22

标签: python list pandas

我有一个带有MultiIndex的pandas DataFrame。我想得到一个包含level0这样的MultiIndex level1[level0,[level1-1,level1-2,(...)]的列表。

例如:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
df = pd.DataFrame(np.random.randn(8), index=arrays,columns=['values'])
df

退出:

           values
bar one  2.171200
    two -0.665047
baz one  0.474036
    two  0.082408
foo one  1.820585
    two  0.698537
qux one  1.163479
    two  0.129044

我要输出这样的数据帧:

      output
bar  ['one','two']
baz  ['one','two']
foo  ['one','two']
qux  ['one','two']

如何?非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以输入pd.DataFrame构造函数,然后使用groupby

res = pd.DataFrame(df.index.values.tolist(), columns=['idx1', 'idx2'])\
        .groupby('idx1')['idx2'].apply(list)

print(res)

idx1
bar    [one, two]
baz    [one, two]
foo    [one, two]
qux    [one, two]
Name: idx2, dtype: object

答案 1 :(得分:2)

reset_indexgroupbylist一起使用:

df1 = (df.reset_index()
        .groupby('level_0')['level_1']
        .apply(list)
        .rename_axis(None)
        .to_frame('output'))

MultiIndex.to_frame(熊猫0.20.0+中新增):

df1 = df.index.to_frame().groupby(0)[1].apply(list).rename_axis(None).to_frame('output')
print (df1)

         output
bar  [one, two]
baz  [one, two]
foo  [one, two]
qux  [one, two]