基于多级索引在熊猫数据框中添加行

时间:2018-06-21 13:41:40

标签: python python-3.x pandas

我有一个像这样的数据框:

(multilevel)index  aaa,aaa,aaa,bbb,bbb,bbb,ccc,ccc

    Column          1,  1 , 1 , 0,  1,  0,  1 , 1               

我想基于索引添加行,以便获得:

   index       aaa,    bbb,     ccc 
   column       3,      1,       2        

有可能吗?

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

也许您可以通过移调来执行类似的操作?

import pandas as pd

df = pd.DataFrame([['aaa', 'aaa', 'aaa','bbb', 'bbb', 'bbb', 'ccc', 'ccc'],
                   [1, 1, 1, 0, 1, 0, 1, 1]], index = ['index', 'column'])

因此,我先进行移调,将它们分组,然后再次进行移调:

df = df.T
df = df.groupby('index').sum()
df = df.T

输出:

index   aaa  bbb  ccc
column    3    1    2

答案 1 :(得分:0)

如果这些列具有相同的名称,则可以通过stack + pivot_table将聚合函数设置为sum到达所需的位置。

设置

import pandas as pd
df = pd.DataFrame({'id1': [1,1,1,2], 'id2': [1,2,3,1],
                 '1': [1,1,1,1], '2': [0,0,1,1], '3': [0,1,0,0],
                 '4': [0,0,0,0], '5': [1,1,0,0], '6': [0,1,0,0]})
df = df.set_index(['id1', 'id2'])
df.columns=['aaa','aaa','aaa','bbb','bbb','bbb']

         aaa  aaa  aaa  bbb  bbb  bbb
id1 id2                              
1   1      1    0    0    0    1    0
    2      1    0    1    0    1    1
    3      1    1    0    0    0    0
2   1      1    1    0    0    0    0

堆叠并旋转

stacked = df.stack().reset_index()
df = pd.pivot_table(stacked, index=['id1', 'id2'], columns='level_2', values=0, aggfunc='sum')
df.columns.name=None

print(df)
         aaa  bbb
id1 id2          
1   1      1    1
    2      2    2
    3      2    0
2   1      2    0