我有以下使用 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 :(得分: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)))))