我有一个带有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']
如何?非常感谢。
答案 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_index
与groupby
和list
一起使用:
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]