Python 如何将一列的值与另一列的值相除/相乘?
我的数据框看起来像这样Python 如何将一列的值与另一列的值相除/相乘?,python,pandas,Python,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 我想用这些列将该数据帧转换为数据帧 Po
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']
然后我连接所有的系列,什么是蟒蛇式的方法?如何使用Map/lambda操作来实现这一点?不,连接新系列非常惯用
您还可以使用
df['newcol']=…
来构建您想要的内容。不,连接新系列非常惯用
您还可以使用df['newcol']=…
来构建您想要的内容。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
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
将数据帧中除第一列以外的所有列除以第一列
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)
我相信您将需要重新计算FG%和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、 美国勇士队 将数据帧中除第一列以外的所有列除以第一列
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)
我相信您将需要重新计算FG%和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、 美国勇士队 您好@Dude,您能提供一个示例输入,帮助我们帮助您,并了解您到底在做什么吗?您的帖子中有不一致的列名称。最好让一个具体的SSCCE@zmo用实际的数据帧更新问题。您能提供初始化示例数据帧的最简单/规范的代码片段,以及如何使用它,以及在哪里/如何被卡住?另外,是否要将
点/分钟
连接起来,或创建一个新值与计算点/分钟
的实际结果?i、 e.您是想将793/2810
存储为字符串,还是想计算并存储0.28…
?@zmo再次更新了问题以进一步澄清,我想要一个带有每分钟统计数据的新数据框,并且我想将其存储在与先前相同的数据类型中,即float。您好@Dude,您能提供一个示例输入,为了帮助我们帮助您,并了解您到底在做什么?您的帖子中有不一致的列名称。最好让一个具体的SSCCE@zmo用实际的数据帧更新问题。您能提供初始化示例数据帧的最简单/规范的代码片段,以及如何使用它,以及在哪里/如何被卡住?另外,是否要将点/分钟
连接起来,或创建一个新值与计算点/分钟
的实际结果?i、 e.您是想将793/2810
存储为字符串,还是想计算并存储0.28…
?@zmo再次更新了该问题以进一步澄清,我想要一个新的数据框,其中包含每分钟统计数据,我想将其存储在与前面相同的数据类型中,即float。你能告诉我实现这一点的map/lamdba命令是什么吗?你能告诉我实现这一点的map/lamdba命令是什么吗?谢谢你的回答,这里index=input_data.index的作用是什么?这意味着您在新的dataframe
中重复使用原始dataframe
的index
谢谢您的回答,这里index=input_data.index的作用是什么?这意味着您在新的dataframe
中重复使用原始dataframe
的索引是的,我不应该规范化这两列。我可以通过索引处理它们。请解释一下lambda s:s/df.iloc[:,0]
part好吗?它在数据帧的每列(系列)上执行lambda函数。因此,s
是序列列,df.iloc[:,0]
是第一列<代码>iloc是整数索引[:,0]
意味着从第一列获取所有行(使用基于零的索引)。是的,我不应该规范化这两列。我可以通过索引处理它们。请解释一下lambda s:s/df.iloc[:,0]part好吗?它在数据帧的每列(系列)上执行lambda函数。因此,s
是序列列,df.iloc[:,0]
是第一列<代码>iloc是整数索引[:,0]
表示从第一列获取所有行(使用基于零的索引)。