Zastosowanie list comprehension
dla określonych nowych nazw kolumn:
df.columns = df.columns.map('_'.join)
Or:
df.columns = ['_'.join(col) for col in df.columns]
Próbka:
df = pd.DataFrame({'A':[1,2,2,1],
'B':[4,5,6,4],
'C':[7,8,9,1],
'D':[1,3,5,9]})
print (df)
A B C D
0 1 4 7 1
1 2 5 8 3
2 2 6 9 5
3 1 4 1 9
df = df.groupby('A').agg([max, min])
df.columns = df.columns.map('_'.join)
print (df)
B_max B_min C_max C_min D_max D_min
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3
print (['_'.join(col) for col in df.columns])
['B_max', 'B_min', 'C_max', 'C_min', 'D_max', 'D_min']
df.columns = ['_'.join(col) for col in df.columns]
print (df)
B_max B_min C_max C_min D_max D_min
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3
Jeśli potrzebujesz prefix
proste elementy wymienne krotek:
df.columns = ['_'.join((col[1], col[0])) for col in df.columns]
print (df)
max_B min_B max_C min_C max_D min_D
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3
Innym rozwiązaniem:
df.columns = ['{}_{}'.format(i[1], i[0]) for i in df.columns]
print (df)
max_B min_B max_C min_C max_D min_D
A
1 4 4 7 1 9 1
2 6 5 9 8 5 3
Jeśli len
kolumn jest duża (10^6), wówczas raczej używać to_series
i str.join
:
df.columns = df.columns.to_series().str.join('_')
@jezrael Jest to nowy wpadłem dzisiaj ;-) zrozumieniem wciąż nieco szybciej. – piRSquared
Myślę, że jest jeden wyjątek - jeśli len kolumn jest bardzo duży (kilka 10^6), to jest to szybsze. 'df.columns = df.columns.to_series(). str.join ('_')'. Ale myślę, że praktycznie len z "kolumn" jest mały, więc zrozumienie listy jest lepsze. – jezrael
@jezrael jest również szybszy, gdy jest więcej poziomów. 'pd.MultiIndex.from_product ([lista ('ABCD'), zakres (4), lista ('wxyz')])' – piRSquared