如何在pandas MultiIndex DataFrame中连接列值?

时间:2017-10-09 14:46:23

标签: python pandas join dataframe

如何在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"

2 个答案:

答案 0 :(得分:2)

我不完全确定你在问什么。如果您有两个单独的数据框,那么您应该只能使用pd.concat

pd.concat([df1, df2], axis=1)

如果您有一个数据帧,那么只需删除索引的顶层。

df.columns = df.columns.droplevel(0)

答案 1 :(得分:1)

新答案:

对于列中SELECT COUNT(DISTINCT u) FROM (SELECT UNNEST(users) AS u FROM mytable) t 的第二级联接值,请groupby使用agg

MultiIndex

旧答案:

您可以使用sort_index对列进行排序,然后使用droplevel删除第一级#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

但是要获得重复的列名称。

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