如何在Pandas MultiIndex DataFrame中联接列值?

曼加拉维特(VítorMangaravite)

如何在MultiIndex pandas DataFrame中以相同名称连接列中的值?

data = [['1','1','2','3','4'],['2','5','6','7','8']]
df = pd.DataFrame(data, columns=['id','A','B','A','B'])
df = df.set_index('id')
df.columns = pd.MultiIndex.from_tuples([('result','A'),('result','B'),('student','A'),('student','B')])

df
   result    student   
        A  B       A  B
id                     
1       1  2       3  4
2       5  6       7  8

所需结果:

        A       B
id                     
1       "1 3"   "2 4"
2       "5 7"   "6 8"
耶斯列尔

新答案:

对于由第二级连接值MultiIndex的列使用groupbyagg

#select columns define in list
df = df[['result','student']]
df1 = df.astype(str).groupby(level=1, axis=1).agg(' '.join)
print (df1)
      A    B
id          
1   1 3  2 4
2   5 7  6 8

旧答案:

您可以使用sort_index排序列,然后droplevel删除的第一级MultiIndex

但是获取重复的列名称。

print (df)
   result    student    col   
        A  B       A  B   A  B
id                            
1       1  2       3  4   6  7
2       5  6       7  8   2  1

#select columns define in list
df = df[['result','student']]
print (df)
   result    student   
        A  B       A  B
id                     
1       1  2       3  4
2       5  6       7  8

df = df.sort_index(axis=1, level=1)
df.columns = df.columns.droplevel(0)
print (df)
    A  A  B  B
id            
1   1  3  2  4
2   5  7  6  8

所以更好的,唯一列名可以通过创建map具有join

df = df.sort_index(axis=1, level=1)
df.columns = df.columns.map('_'.join)
print (df)
    result_A  student_A  result_B  student_B
id                                          
1          1          3         2          4
2          5          7         6          8

df = pd.concat([df['result'],df['student']], axis=1).sort_index(axis=1)
print (df)
    A  A  B  B
id            
1   1  3  2  4
2   5  7  6  8

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章