我想将数据框的列组织成组。一般来说,当我进行分析时,我可能会遇到类似标识符变量,自变量和因变量的问题,我认为将所有这些变量放在一个共同的标题下组织起来很好。
这是一个例子
import string
import pandas as pd
df = pd.DataFrame({"a": list(string.ascii_lowercase[:5]),
"b" : np.arange(0,5),
"c":list(string.ascii_uppercase[:5]),
"d" : np.arange(5,10)})
index1 = pd.MultiIndex.from_product([["Letter"], ["a","c"]])
index2 = pd.MultiIndex.from_product([["Number"], ["b", "d"]])
index = index1.union(index2)
df.columns = index
这不完全有效。
Letter Number
a c b d
0 a 0 A 5
1 b 1 B 6
2 c 2 C 7
3 d 3 D 8
4 e 4 E 9
相反,我需要添加
df = df[index.get_level_values(1)]
df.columns = index
重新排列列,以便在更改索引之前它们与第二级多索引对齐。这感觉有点笨拙,我只是想知道是否有更好的方法来做到这一点。
答案 0 :(得分:0)
这是一个很好的解决方案:
import string
import pandas as pd
df = pd.DataFrame({"a": list(string.ascii_lowercase[:5]),
"b" : np.arange(0,5),
"c":list(string.ascii_uppercase[:5]),
"d" : np.arange(5,10)})
index1 = pd.MultiIndex.from_product([["Letter"], ["a","c"]])
index2 = pd.MultiIndex.from_product([["Number"], ["b", "d"]])
index = index1.union(index2)
df.columns = index
print(df)
Letter Number
a c b d
0 a 0 A 5
1 b 1 B 6
2 c 2 C 7
3 d 3 D 8
4 e 4 E 9
更多pythonic方式扁平化多索引柱
df.columns = df.columns.map('_'.join)
print(df)
输出:
Letter_a Letter_c Number_b Number_d
0 a 0 A 5
1 b 1 B 6
2 c 2 C 7
3 d 3 D 8
4 e 4 E 9