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