【问题标题】:applying different functions over a certain column in pandas在 pandas 的某个列上应用不同的函数
【发布时间】:2022-10-07 22:31:38
【问题描述】:

我想在 python 中使用 apply 和 lambda 方法来更改列中的定价。列名称是价格。所以,如果价格低于 20 我想通过并保持不变。如果 30>price>20 我想加 1。如果价格是 40>price>30 那么我想加 1.50。等等。我试图找出一种方法将这些函数应用于列,然后将其发送回 excel 格式以更新定价。我对如何做到这一点感到困惑。我尝试使用 if 子句将此操作放入函数中,但它没有吐出我需要的结果(k 是数据框的名称):

def addition():
    if k[k['Price']] < 20]:
        pass
    if k[(k['Price']] > 20) & (k['Price] < 30)]:
       return k + 1
    if k[(k['Price']] > 30.01) & (k['Price] < 40)]:
       return k + 1.50

等等。但是,最后,当我尝试发送时(我认为是 xlsx 中新更新的 k[k['Price] 格式,它甚至没有出现。我也尝试将 xlsx 变量设为全局变量,但是仍然没有运气。我认为使用 lambda 函数更简单,但我在决定如何根据条件分离和更新该列中的价格时遇到了麻烦。将不胜感激。

这是我试图执行不同功能的数据框:

   0        23.198824
   1        21.080706
   2        15.810118
   3        21.787059
   4        18.821882
                  ...    
   33525    20.347059
   33526    25.665882
   33527    33.077647
   33528    21.803529
   33529    23.043529
   Name: Price, Length: 33530, dtype: float64

【问题讨论】:

  • 您能否提供数据帧的 sn-p 以及您想要使用的此功能以实现您的编程目标?
  • @CalciumOwl 感谢您的回复。我已经上传了

标签: python


【解决方案1】:

为此,您可以使用apply 方法和lambda 以及嵌套的if..elses。

import pandas as pd

df = pd.DataFrame({
    'Price': [10.0, 23.0, 50.0, 32.0, 12.0, 50.0]
})

df = df['Price'].apply(lambda x: x if x < 20.0 else (x + 1.0 if ((x > 20.0) & (x < 30.0)) else x + 1.5))

print(df)

输出:

0    10.0
1    24.0
2    51.5
3    33.5
4    12.0
5    51.5
Name: Price, dtype: float64

【讨论】:

    【解决方案2】:

    如果k 是数据框,那么k+1 将不起作用,它会导致错误。您可以编写一个函数来更改价格并将其应用于列 -

    def update_price(price):
         if 20<price<30:
             price += 1
         elif 30<price<40:
             price += 1.5
         return price
    
    df['Updated_Price'] = df['Price'].apply(lambda x: update_price(x))
    
    In [39]: df
    Out[39]: 
      Name  Price
    0    a     15
    1    b     23
    2    c     37
    
    In [43]: df
    Out[43]: 
      Name  Price  Updated_Price
    0    a     15           15.0
    1    b     23           24.0
    2    c     37           38.5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2023-04-08
      • 2018-05-02
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多