Моя цель проста.python if statement with multiple critieria
С ниже dataframe (DF3):
если mr_no равно определенное число (у меня есть список для этого ниже), то огонь, если Fire1 равно покрыта затем огонь, и если Пуск2 равно к первому или второму, затем к огню, иначе, если ни один из этих трех критериев не будет удовлетворен, чем они не являются огнем.
DF3:
mr_no fire1 fire2
0 A5155 covered primary
1 FS2328 covered neither
3 133158 not_covered primary
4 FS2328 not_covered neither
5 A5128 not_covered neither
6 A5128 not_covered neither
7 133158 covered primary
8 133158 not_covered neither
9 A5128 not_covered neither
10 A5129 not_covered neither
Я попытался следующие, чтобы извлечь код мне нужно:
mr = ["A5115","133158","FS2114","FS2110","FS2115","FS2111","FS2149","FS2150","FS2017","FS2018"]
def fire(row):
if row['fire1'] == ('covered') + row['fire2'] == ('primary') | ('secondary') + row['mr_no'] == (mr):
return 'fire'
return 'not fire'
df3['fire_final'] = df3.apply (lambda row: fire(row),axis=1)
Однако мои результаты не ни нашли, но я знаю, что там должно быть что-то:
IN: df3.groupby('fire_final').ssno.count()
OUT: fire_final
not fire 214166
Name: ssno, dtype: int64
Я думаю, что моя ошибка с моим списком, но мои знания в программировании по-прежнему новички, поэтому я n Конечно, как сделать условие для списка.
Как всегда, я очень благодарен за помощь.
UPDATE:
Попытка код, рекомендованный edChum дали результаты, но как вы можете видеть грести 120044 и 120045 показывает Fire1 была «покрыта» и Пуск2 был основным, но они придумали, как не срабатывают, но они должны показать, как Огонь.
df3['fire_final'] = np.where((df3['mr_no'].isin(mr)) & (df3['fire1'] == 'covered') & (df3['fire2'].isin(['primary','secondary'])), 'fire', 'not fire')
mr_no fire1 fire2 fire_final
120020 203670 not_covered neither not fire
120021 001500 not_covered neither not fire
120022 5273 not_covered neither not fire
120023 190365 not_covered neither not fire
120024 A5155 not_covered neither not fire
120025 236707 not_covered neither not fire
120026 A9088 not_covered primary not fire
120027 A9088 not_covered primary not fire
120028 FS1476 not_covered primary not fire
120029 A9092 not_covered primary not fire
120031 FS1476 not_covered neither not fire
120032 FS1476 not_covered neither not fire
120033 AFM002 not_covered primary not fire
120034 A9092 not_covered primary not fire
120035 FS1476 not_covered primary not fire
120036 FS1476 not_covered primary not fire
120037 007881 not_covered neither not fire
120038 007286 not_covered neither not fire
120039 A010 not_covered neither not fire
120041 N5012 not_covered neither not fire
120042 FS1478 covered primary fire
120043 FS1478 covered primary fire
120044 A2075 covered primary not fire
120045 136492 covered primary not fire
UPDATE:
рекомендация от EdChum работал, когда я | вместо &
df3['fire_final'] = np.where((df3['mr_no'].isin(mr)) | (df3['fire1'] == 'covered') | (df3['fire2'].isin(['primary','secondary'])), 'fire', 'not fire')
получения желаемых результатов:
mr_no fire1 fire2 fire_final
120062 FS0937 not_covered secondary fire
120063 FS0937 not_covered secondary fire
120064 FS0900 not_covered secondary fire
120066 FS2037 covered primary fire
120067 A9090 not_covered neither not fire
120068 129440 covered neither fire
120069 FS1629 covered primary fire
120070 FS2037 covered primary fire
120071 FS2037 covered primary fire
120072 A9074 not_covered neither not fire
120073 ABE102 not_covered neither not fire
120074 ABE100 not_covered neither not fire
120075 A5125 not_covered neither not fire
120076 199424 not_covered neither not fire
120077 179873 not_covered neither not fire
120078 A021 not_covered neither not fire
120079 A022 not_covered neither not fire
120080 A022 not_covered neither not fire
120081 A022 not_covered neither not fire
Думаю, вам могут понадобиться 'и' и 'или' вместо' + 'и' | '. Те не делают то, что вы, кажется, думаете, что они делают. –
Я сделал что-то подобное в прошлом и работал как шарм: def label_race (строка): if row ['eri_hispanic'] == 1: return 'Hispanic' if row ['eri_afr_amer'] + row ['eri_asian] '] + row [' eri_hawaiian '] + row [' eri_nat_amer '] + row [' eri_white ']> 1: return' Two or More ' – david
Разница в том, что у меня есть несколько критериев в состоянии. Я попробовал .isin вместо ==, но это дало мне ошибку. – david