如何将某一列的特定数值乘以一个常数?

6

我有一个数据框,看起来像这样:

     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

我想要实现的是,将特定产品对应的某些分数值乘以一个常数。我有需要进行乘法操作的产品列表,例如:[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函数,但是检查了例子后发现它只作用于整个列,而我只需要改变特定的值。

4个回答

5
你可以使用布尔索引和 isin 进行操作:
prod_list =  [1069104, 1069105]
df.loc[df['product'].isin(prod_list), 'score'] *= 10

1
你可以使用loc功能(文档)-
df = pd.DataFrame([[1, 'a'], [2, 'a'], [3, 'b']], columns=['num', 'c'])
df.loc[df.c == 'a', 'num'] =  df.num * 10

0

我们可以在for循环中使用if条件语句,来使特定的值相乘

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

0
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)

谢谢。将来会尝试做到这一点。 - Douw Marx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接