如何将列的某些值乘以常数?

时间:2020-04-21 14:33:06

标签: python python-3.x pandas dataframe

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

     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 个答案:

答案 0 :(得分:5)

您可以使用布尔索引和isin

prod_list =  [1069104, 1069105]
df.loc[df['product'].isin(prod_list), 'score'] *= 10

答案 1 :(得分:1)

您可以使用loc功能(documentation)-

df = pd.DataFrame([[1, 'a'], [2, 'a'], [3, 'b']], columns=['num', 'c'])
df.loc[df.c == 'a', 'num'] =  df.num * 10

答案 2 :(得分:0)

我们可以使用带循环条件的if条件乘以特定值

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

答案 3 :(得分: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)