【问题标题】:How to multiply certain values of a column by a constant?如何将列的某些值乘以常数?
【发布时间】:2020-08-04 08:23:51
【问题描述】:

我有一个如下所示的数据框:

     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 但检查它适用于完整列的示例,我只需更改这些特定值。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:
    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)
    

    【讨论】:

    • 谢谢。将来会尝试这样做。
    【解决方案2】:

    我们可以使用 if 条件和 for 循环来乘以特定值

    对于范围内的 i (len(df)): `如果((df[colun]==1069104)或(df[coun]==1069105)): df[分数]=df[分数]*10

    【讨论】:

      【解决方案3】:

      您可以使用布尔索引和isin

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-27
          相关资源
          最近更新 更多