Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于类的乘法列_Python_Python 3.x_Pandas Groupby - Fatal编程技术网

Python 基于类的乘法列

Python 基于类的乘法列,python,python-3.x,pandas-groupby,Python,Python 3.x,Pandas Groupby,我想将两列相乘,但前提是它们属于特定的类 我已尝试根据如下所示的条件将列相乘: import pandas as pd import numpy as np d = {'Values':[1,1,1],'Class':[0,1,0],'Weights':[0.8,0.9,0.7]} dataset = pd.DataFrame(data = d) print(dataset) (dataset[dataset['Class']==1])['Values'] = (dataset[datase

我想将两列相乘,但前提是它们属于特定的类

我已尝试根据如下所示的条件将列相乘:

import pandas as pd
import numpy as np

d = {'Values':[1,1,1],'Class':[0,1,0],'Weights':[0.8,0.9,0.7]}
dataset = pd.DataFrame(data = d)
print(dataset)

(dataset[dataset['Class']==1])['Values'] = (dataset[dataset['Class']==1])['Values']*dataset['Weights']

print(dataset)
但这不会改变数据集

然后我试了一下:

d = {'Values':[1,1,1],'Class':[0,1,0],'Weights':[0.8,0.9,0.7]}
dataset = pd.DataFrame(data = d)
print(dataset)

dataset['Weights'] = dataset['Weights']*dataset['Class']
replace_weights = {0:1}
dataset['Weights'] = dataset['Weights'].replace(replace_weights)

dataset['Values'] = dataset['Values']*dataset['Weights']

print(dataset)
这给了我预期的结果,但我想知道是否有一个更简单或更优雅的方式来做这件事

我的输入数据帧是:

   Values  Class  Weights
0       1      0      0.8
1       1      1      0.9
2       1      0      0.7
输出数据帧为:

   Values  Class  Weights
0     1.0      0      1.0
1     0.9      1      0.9
2     1.0      0      1.0

在Pandas中,当您想要更改数据帧片段的值时,必须使用loc函数。否则,您的代码是正确的

要返回代码,请执行以下操作:

import pandas as pd
import numpy as np

d = {'Values':[1,1,1],'Class':[0,1,0],'Weights':[0.8,0.9,0.7]}
dataset = pd.DataFrame(data = d)

print(dataset)

Class  Values  Weights
    0      0       1      0.8
    1      1       1      0.9
    2      0       1      0.7

dataset.loc[dataset['Class']==1, 'Values'] = dataset[dataset['Class']==1]['Values']*dataset['Weights']

print(dataset)

   Class  Values  Weights
0      0     1.0      0.8
1      1     0.9      0.9
2      0     1.0      0.7

你应该只编辑你的问题来澄清你想说什么。如果您有“另一个问题”帖子“另一个问题”,请不要编辑您的问题以将其转换为“另一个问题”。否则,已经发布的答案(如我的)就会过时。你说得对。我再次编辑了这个问题以改进它。谢谢