使用 Python Pandas 根据多个条件创建一个名为 df['EV_Sales_Score'] 的列

时间:2021-06-20 10:08:42

标签: python pandas dataframe numpy

我有以下使用 Pandas 的数据框:

df = pd.DataFrame({'ISIN': ['A1kT23', '4523', 'B333', '49O33'],
    'Name': ['Example A', 'Name Xy', 'Example B', 'Test123'],
    'Debt_Equity': [-65.56, 0.55, 0, 37],
     'EV_Sales': [9.28, 0.53, 11.3, 45]})

我想根据多个条件创建一个名为 df['EV_Sales_Score'] 的列。

  • 如果 0 < EV_Sales <=8 EV_Sales_Score 应为 3,
  • 如果 8 < EV_Sales <=10 EV_Sales_Score 应为 2,
  • 如果 10 < EV_Sales <=12 EV_Sales_Score 应为 1 并且
  • 在其他情况下,EV_Sales_Score 应为 0。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

尝试通过 numpy 的 select() 方法:

import numpy as np

conditions=[
((df['EV_Sales'] > 0) & (df['EV_Sales'] <=8)),
((df['EV_Sales'] > 8) & (df['EV_Sales'] <=10)),
((df['EV_Sales'] > 10) & (df['EV_Sales'] <=12))
]
    
labels=[3,2,1]

最后:

df['EV_Sales_Score'] =np.select(conditions,labels)

答案 1 :(得分:0)

使用熊猫 between 不允许单边包容。 改用这个:

df['EV_Sales_Score'] = 0
df.loc[(df.EV_Sales > 0) & (df.EV_Sales <=8), 'EV_Sales_Score'] = 3
df.loc[(df.EV_Sales > 8) & (df.EV_Sales <=10), 'EV_Sales_Score'] = 2
df.loc[(df.EV_Sales > 10) & (df.EV_Sales <=12), 'EV_Sales_Score'] = 1

等等

答案 2 :(得分:0)

另一个解决方案 /answer 将使用 numpy 中的 where 方法:

df['EV_Sales_Score'] = np.where((0 < df['EV_Sales']) & (df['EV_Sales'] <= 8), 3, 
                  (np.where((8 < df['EV_Sales']) & (df['EV_Sales'] <= 10), 2, 
                  (np.where((10 < df['EV_Sales']) & (df['EV_Sales'] <= 12), 1, 0)))))