2016-05-16 66 views
3

我有以下數據幀列上應用sqrt函數

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012], 
       'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions'], 
       'wins': [11, 8, 10, 15, 11, 6, 10, 4], 
       'losses': [5, 8, 6, 1, 5, 10, 6, 12]} 

football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses']) 
football.set_index(['team', 'year'], inplace=True) 

如何申請sqrt功能我也總結到列後?

football[['wins', 'losses']].sum(axis=1) 

回答

5

只需使用numpy.sqrt()see docs)上所產生的pd.Series

import numpy as np 
np.sqrt(football[['wins', 'losses']].sum(axis=1)) 

但當然有幾種方法來完成相同的結果 - 請參閱下面的說明:

df = pd.DataFrame.from_dict(data={'col_1': np.random.randint(low=1, high=10, size=10), 'col_2': np.random.randint(low=1, high=10, size=10)}, orient='index').T 

df['sum'] = df[['col_1', 'col_2']].sum(axis=1) 
df['np'] = np.sqrt(df[['col_1', 'col_2']].sum(axis=1)) 
df['apply'] = df[['col_1', 'col_2']].sum(axis=1).apply(np.sqrt) 
df['**'] = df[['col_1', 'col_2']].sum(axis=1) ** .5 

    col_1 col_2 sum  np  apply  ** 
0  8  3 11 3.316625 3.316625 3.316625 
1  4  1 5 2.236068 2.236068 2.236068 
2  6  2 8 2.828427 2.828427 2.828427 
3  4  1 5 2.236068 2.236068 2.236068 
4  4  7 11 3.316625 3.316625 3.316625 
5  7  4 11 3.316625 3.316625 3.316625 
6  5  5 10 3.162278 3.162278 3.162278 
7  1  2 3 1.732051 1.732051 1.732051 
8  6  6 12 3.464102 3.464102 3.464102 
9  5  7 12 3.464102 3.464102 3.464102 
1

我是內置pandas.DataFrame.pow的個人粉絲(文檔號here)。這樣你就可以得到各種秩序的根源(就像斯蒂芬的最後一個例子)。

football[['wins','losses']].sum(axis=1).pow(1./2)