Как умножить определенные значения столбца на константу? - PullRequest
4 голосов
/ 21 апреля 2020

У меня есть кадр данных, который выглядит следующим образом:

     product     score
0    1179160  0.424654
1    1066490  0.424509
2    1148126  0.422207
3    1069104  0.420455
4    1069105  0.414603
..       ...       ...
491  1160330  0.168784
492  1069098  0.168749
493  1077784  0.168738
494  1193369  0.168703
495  1179741  0.168684

Я пытаюсь добиться умножения определенных значений баллов, соответствующих конкретным c продуктам, на константу. У меня есть целевой продукт этого умножения в списке, подобном следующему: [1069104, 1069105] (это просто упрощенный пример, в действительности это будет более двух продуктов), и моя цель состоит в том, чтобы получить это:

Умножьте оценки, соответствующие продуктам 1069104 и 1069105, на 10:

     product     score
0    1179160  0.424654
1    1066490  0.424509
2    1148126  0.422207
3    1069104  4.204550
4    1069105  4.146030
..       ...       ...
491  1160330  0.168784
492  1069098  0.168749
493  1077784  0.168738
494  1193369  0.168703
495  1179741  0.168684

Я знаю, что существует DataFrame.multiply, но проверяя примеры, он работает для полных столбцов, и я только один, чтобы изменить эти указанные c значения .

Ответы [ 4 ]

4 голосов
/ 21 апреля 2020

Вы можете использовать логическое индексирование и isin:

prod_list =  [1069104, 1069105]
df.loc[df['product'].isin(prod_list), 'score'] *= 10
0 голосов
/ 21 апреля 2020
import pandas as pd

# Make data
df = pd.DataFrame({'product': [2, 4, 8, 0],
                   'score': [0.2, 0.1, 0.2, 0.1]})

# List of products to change
product_list = [8,4]

for product_no in product_list:                    # Loop though product numbers
    product = df.loc[df['product'] == product_no]  # Find the product corresponding to given product number
    score = product["score"].values[0]             # Extract the score for the given product number

    print(score*10)                                # Modify score as you please

    df.at[product.index[0], "score"] = score*10    # If you want to modify the dataframe with the new value

print(df)
0 голосов
/ 21 апреля 2020

Мы можем использовать условие if для l oop для умножения заданных значений c

for i in range (len(df)):
    `if((df[colun]==1069104) or (df[colun]==1069105)):
          df[score]=df[score]*10

0 голосов
/ 21 апреля 2020

Вы можете использовать loc функциональность ( документация ) -

df = pd.DataFrame([[1, 'a'], [2, 'a'], [3, 'b']], columns=['num', 'c'])
df.loc[df.c == 'a', 'num'] =  df.num * 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...