2013-10-24 2 views
2

Скажем, у меня есть три DataFrames:Каков наилучший способ выполнения операции над несколькими DataFrames?

import pandas as pd 
import numpy as np 

cols = ['A','B','C'] 
index = [1,2,3,4,5] 
np.random.seed(42) 

apple = pd.DataFrame(np.random.randn(5,3), index=index, columns=cols) 
orange = pd.DataFrame(np.random.randn(5,3), index=index, columns=cols) 
banana = pd.DataFrame(np.random.randn(5,3), index=index, columns=cols) 

In [50]: apple 
Out[50]: 
      A   B   C 
1 0.496714 -0.138264 0.647689 
2 1.523030 -0.234153 -0.234137 
3 1.579213 0.767435 -0.469474 
4 0.542560 -0.463418 -0.465730 
5 0.241962 -1.913280 -1.724918 

In [51]: orange 
Out[51]: 
      A   B   C 
1 -0.562288 -1.012831 0.314247 
2 -0.908024 -1.412304 1.465649 
3 -0.225776 0.067528 -1.424748 
4 -0.544383 0.110923 -1.150994 
5 0.375698 -0.600639 -0.291694 

In [52]: banana 
Out[52]: 
      A   B   C 
1 -0.601707 1.852278 -0.013497 
2 -1.057711 0.822545 -1.220844 
3 0.208864 -1.959670 -1.328186 
4 0.196861 0.738467 0.171368 
5 -0.115648 -0.301104 -1.478522 

Что самое лучший/быстрый/простой способ создать новый dataframe с теми же колоннами и индексом, но с максимальным значением из каждого столбца и индекса для яблока, апельсин , банан? I.e., для [1, A] новое значение dataframe будет 0.496714, для [1, B] значение будет 1.852278 и т. Д. Спасибо!

ответ

3

Я думаю, что что-то подобное должно быть быстрым:

np.maximum(np.maximum(orange, apple), banana) 

Использование numpy.maximum():

поэлементно максимум элементов массива.

Как @Jeff предложил в комментариях, в общем, было бы:

reduce(np.maximum, [orange,apple,banana]) 
+0

'' уменьшить (np.maximum, [orange, apple, banana]) '', общий случай – Jeff

+0

@Jeff спасибо, хорошее предложение –

0

Почему не сцепить DataFrames в Panel, а затем использовать Panel.max()?

т.е. pd.Panel({'a':apple ,'b':banana,'o';orange}).max(axis=0)

Правда, не самый быстрый, но это гарантирует правильное выравнивание индекса, и вы можете использовать Panel для чего-то еще позже. Ваши данные выглядят как 3D, с тремя индексационными элементами (cols/index/fruit), поэтому используйте трехмерную структуру данных.

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