2016-09-17 5 views
0

Я применяю эту функцию через dataframe df1, такие как следующее:Применить функцию Numpy по всему Dataframe

      AA   AB    AC   AD 
2005-01-02 23:55:00  "EQUITY" "EQUITY"  "EQUITY"  "EQUITY" 
2005-01-03 00:00:00  32.32  19.5299  32.32  31.0455 
2005-01-04 00:00:00  31.9075  19.4487  31.9075  30.3755 
2005-01-05 00:00:00  31.6151  19.5799  31.6151  29.971 
2005-01-06 00:00:00  31.1426  19.7174  31.1426  29.9647 

def func(x): 
    for index, price in x.iteritems(): 
     x[index] = price/np.sum(x,axis=1) 
    return x[index] 

df3=func(df1.ix[1:]) 

Однако, я получаю только один столбец возвращается в отличие от 3

2005-01-03 0.955843 
    2005-01-04 0.955233 
    2005-01-05 0.955098 
    2005-01-06 0.955773 
    2005-01-07 0.955877 
    2005-01-10  0.95606 
    2005-01-11  0.95578 
    2005-01-12 0.955621 

Я предполагаю, что я пропустил что-то в формуле, чтобы применить ее ко всему кадру данных. Также как я могу вернуть первый индекс, который имеет строки в своей строке?

ответ

2

Вы должны сделать это следующим образом:

def func(row): 
    return row/np.sum(row) 
df2 = pd.concat([df[:1], df[1:].apply(func, axis=1)], axis=0) 

Он имеет 2 шага:

  1. df[:1] извлекает первую строку, которая содержит строки, в то время как df[1:] представляет остальную часть DataFrame. Вы позже их конкатенируете, что отвечает на вторую часть вашего вопроса.
  2. Для работы по строкам вы должны использовать метод apply().
+0

спасибо !! perfect – uniXVanXcel

+0

что если бы я хотел разделить сумму (строку) на значение в каждой ячейке, я бы просто сделал np.sum (row)/row right? thnks – uniXVanXcel

+1

Да. Вот как вы это сделаете. – Ujjwal

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