我想根据各种条件创建一个新列
假设我有一个df,其中A列可以等于以下任意值:['Single','Multiple','Commercial','Domestic','Other'],B列的数值介于0到30之间
如果A ='Single'或'Multiple',我试图使C列为'中等',并且如果它等于其他任何值,则考虑B列中的值。如果A列!='Single'或“多个”,如果3 19,则C列将为中等;如果B> = 19,则C列将为“高”。
我尝试了各种循环组合,但似乎无法理解。有帮助吗?
trial = []
for x in df['A']:
if x == 'Single' or x == 'Multiple':
trial.append('Moderate')
elif x != 'Single' or x != 'Multiple':
if df['B']>19:
trial.append('Test')
df['trials'] = trial
谢谢你
Denisse
答案 0 :(得分:0)
如果您提供一些示例数据,那将会很好。但是,通过我创建的一些代码,您可以看到如何将函数应用到您的DataFrame的每一行。
valuesA = ['Single', 'Multiple', 'Commercial', 'Domestic', 'Other',
'Single', 'Multiple', 'Commercial', 'Domestic', 'Other']
valuesB = [0, 10, 20, 25, 30, 25, 15, 10, 5, 3 ]
df = pd.DataFrame({'A': valuesA, 'B': valuesB})
| | A | B |
|---:|:-----------|----:|
| 0 | Single | 0 |
| 1 | Multiple | 10 |
| 2 | Commercial | 20 |
| 3 | Domestic | 25 |
| 4 | Other | 30 |
| 5 | Single | 25 |
| 6 | Multiple | 15 |
| 7 | Commercial | 10 |
| 8 | Domestic | 5 |
| 9 | Other | 3 |
您没有指定如果B列小于或等于3会发生什么,因此我假设C将为'Low'。根据需要调整功能。另外,也许您的问题中有一个错字,当您说“ 3 19”时,我改为了“ 3
def my_function(x):
if x['A'] in ['Single', 'Multiple']:
return 'Moderate'
else:
if x['B'] <= 3:
return 'Low'
elif 3 < x['B'] < 19:
return 'Moderate'
else:
return 'High'
新列
有了DataFrame和新功能,您可以使用使用参数'axis = 1'的apply方法将其应用于每一行:
df['C'] = df.apply(my_function, axis=1)
| | A | B | C |
|---:|:-----------|----:|:---------|
| 0 | Single | 0 | Moderate |
| 1 | Multiple | 10 | Moderate |
| 2 | Commercial | 20 | High |
| 3 | Domestic | 25 | High |
| 4 | Other | 30 | High |
| 5 | Single | 25 | Moderate |
| 6 | Multiple | 15 | Moderate |
| 7 | Commercial | 10 | Moderate |
| 8 | Domestic | 5 | Moderate |
| 9 | Other | 3 | Low |