2013-11-08 3 views
1

This github issue описывает слияние данных, которые имеют смешанную иерархию, и дает решение сглаживания иерархии кортежами.Pandas объединяет иерархические данные и поддерживает иерархию

df = pd.DataFrame([(1, 2, 3), (4, 5, 6)], columns=['a', 'b', 'c']) 
new_df = df.groupby(['a']).agg({'b': [np.mean, np.sum]}) 
other_df = df = pd.DataFrame([(1, 2, 3), (7, 10, 6)], columns=['a', 'b', 'd']) 
other_df.set_index('a', inplace=True) 
print new_df 
print other_df 
p = pd.merge(new_df, other_df, left_index=True, right_index=True) 
print p 

выход:

 b  
    mean sum 
a   
1  2 2 
4  5 5 

    b d 
a  
1 2 3 
7 10 6 

    (b, mean) (b, sum) b d 
a       
1   2   2 2 3 

Однако я хотел бы сохранить иерархию, с результатом следующим образом:

 b  b d 
    mean sum 
x       
y  . . . . 

Я просто сделал значения точки здесь, поскольку они не действительно имеет смысл в этом сценарии, но, надеюсь, идея ясна .... любая помощь с благодарностью получена.

ответ

3

Ar e вы ищете что-то вроде этого:

>>> other_to_tup = [(x, 'val') for x in other_df.columns] 
>>> other_df.columns = pd.MultiIndex.from_tuples(other_to_tup) 
>>> p = pd.merge(new_df, other_df, left_index=True, right_index=True) 
>>> p 
     b    d 
    mean sum val val 
a 
1  2 2 2 3 
+0

Да, я! Спасибо alko :) – MarkNS

Смежные вопросы