Как сложить условия в DataFrame
Создал игрушечный DateFrame. Хочу решить проблему с условиями, а трактуется вот так:
- вывести всех, кто старше 40
- вывести всех, кто имеет доход выше среднего по датасету
- вывести всех, кто имеет доход выше среднего по датасету, но надежность ниже среднего по датасету
Ну так я это сделал.
import numpy as np
import pandas as pd
'имя': ['Петя', 'Вася', 'Аня', 'Света'],
'возраст': [45, 26, 41 , 21],
'доход': [100000, 80000, 150000, 60000],
'надежность клиента (0..1)': [0.65, 0.74, 0.87, 0.68],
'пол': ['муж', 'муж', 'жен', 'жен']},
index=[0, 1, 2, 3])
print(df[df['возраст'] > 40])
print(df[df['доход'] > df.iloc[:, 2].mean() ]) #вот тут и есть проблема
print(df[df['надежность клиента (0..1)'] < df.iloc[:, 3].mean()])
df.head()
Как сделать так чтобы все эти 3 условия выходили в одну табличку?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Можно, например, запомнить битовые маски в переменных и потом комбинировать их через логическое и, чтобы не повторять условия:
import numpy as np
import pandas as pd
df = pd.DataFrame({
'имя': ['Петя', 'Вася', 'Аня', 'Света'],
'возраст': [45, 26, 41 , 21],
'доход': [100000, 80000, 150000, 60000],
'надежность клиента (0..1)': [0.65, 0.74, 0.87, 0.68],
'пол': ['муж', 'муж', 'жен', 'жен']},
index=[0, 1, 2, 3])
age_above_40 = df['возраст'] > 40
print(df[age_above_40])
income_above_mean = df['доход'] > df['доход'].mean()
print(df[income_above_mean])
reliability_below_mean = df['надежность клиента (0..1)'] < df['надежность клиента (0..1)'].mean()
print(df[income_above_mean & reliability_below_mean])
choosen = pd.DataFrame({
'показатель': ['старше 40', 'имеет доход выше среднего', 'имеет доход выше среднего, но надежность ниже среднего'],
'имена': [df.loc[age_above_40, 'имя'].to_list(),
df.loc[income_above_mean, 'имя'].to_list(),
df.loc[income_above_mean & reliability_below_mean, 'имя'].to_list()]
})
Содержимое choosen:
показатель имена
0 старше 40 [Петя, Аня]
1 имеет доход выше среднего [Петя, Аня]
2 имеет доход выше среднего, но надежность ниже ... [Петя]