2016-03-05 1629 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

相关问题