Умножение столбцов на основе класса - PullRequest
1 голос
/ 22 мая 2019

Я хочу умножить два столбца, но только если они принадлежат определенному классу.

Я попытался умножить столбцы на основе условия, как показано ниже:

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

1 Ответ

1 голос
/ 22 мая 2019

В Pandas вам нужно использовать функцию loc, когда вы хотите изменить значение фрагмента DataFrame. В противном случае ваш код правильный.

Чтобы вернуться к вашему коду:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...