Искам да организирам колоните в моя кадър с даннив групи. Обикновено, когато правя анализ, може да имам нещо като идентификатор променливи, независими променливи и зависими променливи и мисля, че е хубаво организационно да постави всички такива променливи заедно под общи заглавия.
Ето един пример
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 за отговор № 1Ето едно добро решение:
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
По-питонни начин на изравняване на многоиндексни колони
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