2016-03-05 1628 views
0

我的數據幀如下鏈接纔可這個如何在pandas中將列的值與另一列的值相除/相乘?

Minutes Played, Points, Assists 

     MP PTS TRB AST FG% BLK 3P% 
0 2810 793 678 117 0.485 74 0.315 
1 263 101 30 19 0.402 7 0.385 
2 4241 1170 1178 144 0.548 201 0.000 

我想該數據幀到數據幀轉換這些列

Points/Minutes, Assists/Minutes 

基本上第一列是出場總時間,我想隱蔽的所有其餘統計數據以每分鐘計。

右鍵我做

input_data['PTS']/input_data['MP'] 

,然後我連接所有該系列的,什麼是這樣做的Python的方式?我如何使用Map/lambda操作來做到這一點?

+0

您好@Dude,您能否提供一個[MCVE](http://stackoverflow.com/help/mcve)以及示例輸入,以幫助我們幫助您,並瞭解您究竟陷入了何種困境? – zmo

+0

您的帖子中列名命名不一致。最好有一個具體的SSCCE http://zcce.org/ –

+0

@zmo更新與實際數據框架的問題。 – Dude

回答

1

IIUC你可以使用:

print input_data 
    MP PTS TRB AST FG% BLK 3P% 
0 2810 793 678 117 0.485 74 0.315 
1 263 101 30 19 0.402 7 0.385 
2 4241 1170 1178 144 0.548 201 0.000 

input_data['A'] = input_data['PTS']/input_data['MP'] 
input_data['B'] = input_data['AST']/input_data['MP'] 
print input_data 
    MP PTS TRB AST FG% BLK 3P%   A   B 
0 2810 793 678 117 0.485 74 0.315 0.282206 0.041637 
1 263 101 30 19 0.402 7 0.385 0.384030 0.072243 
2 4241 1170 1178 144 0.548 201 0.000 0.275878 0.033954 

print pd.DataFrame({'A': input_data['A'],'B': input_data['B']}, index=input_data.index) 
      A   B 
0 0.282206 0.041637 
1 0.384030 0.072243 
2 0.275878 0.033954 
+0

感謝您的回答,index = input_data.index在這裏的作用是什麼? – Dude

+0

這意味着你在新的'dataframe'中重新使用原始'dataframe'的'index' – jezrael

0

不,連接新系列是大量的慣用。您也可以使用df['newcol'] = ...來建立你想要的。

+0

你能告訴我,map/lamdba命令是做什麼用的? – Dude

1

把所有列在數據幀除了首先由第一列。

df.iloc[:, ].apply(lambda s: s/df.iloc[:, 0]) 
     PTS  TRB  AST  FG%  BLK  3P% 
0 0.282206 0.241281 0.041637 0.000173 0.026335 0.000112 
1 0.384030 0.114068 0.072243 0.001529 0.026616 0.001464 
2 0.275878 0.277765 0.033954 0.000129 0.047394 0.000000 

這也適用於:

df.iloc[:, 1:].div(df.iloc[:, 0].values, axis=0) 

我相信,那麼你就需要重新計算你的投籃命中率和3P%列。這將對原始數據幀進行劃分,使MP,FG%和3P%保持不變。

df.iloc[:, [1, 2, 3, 5]] = df.iloc[:, [1, 2, 3, 5]].div(df.iloc[:, 0].values, axis=0) 

>>> df 
    MP  PTS  TRB  AST FG%  BLK 3P% 
0 2810 0.282206 0.241281 0.041637 0.485 0.026335 0.315 
1 263 0.384030 0.114068 0.072243 0.402 0.026616 0.385 
2 4241 0.275878 0.277765 0.033954 0.548 0.047394 0.000 

p.s.去勇士隊!

+0

是的,我不應該將這兩列標準化。我可以通過索引處理它們。你能解釋一下'lambda s:s/df.iloc [:, 0]'部分嗎? – Dude

+0

它在數據幀的每列(系列)上執行lambda函數。所以's'是系列欄,'df.iloc [:,0]'是第一欄。 'iloc'是整數索引。 '[:,0]'表示從第一列中取出所有行(使用基於零的索引)。 – Alexander

相關問題