Veritas_in_Numeris
Veritas_in_Numeris

Reputation: 179

check for value in pandas Dataframe cell which has a list

I have the following df:

df = pd.DataFrame(columns=['Place', 'PLZ','shortName','Parzellen'])

new_row1 = {'Place':'Winterthur', 'PLZ':[8400, 8401, 8402, 8404, 8405, 8406, 8407, 8408, 8409, 8410, 8411], 'shortName':'WIN', 'Parzellen':[]}
new_row2 = {'Place':'Opfikon', 'PLZ':[8152], 'shortName':'OPF', 'Parzellen':[]}
new_row3 = {'Place':'Stadel', 'PLZ':[8174], 'shortName':'STA', 'Parzellen':[]}
new_row4 = {'Place':'Kloten', 'PLZ':[8302], 'shortName':'KLO', 'Parzellen':[]}
new_row5 = {'Place':'Niederhasli', 'PLZ':[8155,8156], 'shortName':'NIH', 'Parzellen':[]}
new_row6 = {'Place':'Bassersdorf', 'PLZ':[8303], 'shortName':'BAS', 'Parzellen':[]}
new_row7 = {'Place':'Oberglatt', 'PLZ':[8154], 'shortName':'OBE', 'Parzellen':[]}
new_row8 = {'Place':'Bülach', 'PLZ':[8180], 'shortName':'BUE', 'Parzellen':[]}

df = df.append(new_row1, ignore_index=True)
df = df.append(new_row2, ignore_index=True)
df = df.append(new_row3, ignore_index=True)
df = df.append(new_row4, ignore_index=True)
df = df.append(new_row5, ignore_index=True)
df = df.append(new_row6, ignore_index=True)
df = df.append(new_row7, ignore_index=True)
df = df.append(new_row8, ignore_index=True)

print (df)

Now I have a number like 8405 and I want to know the Place or whole Row which has this number under df['PLZ'].

I also tried with classes but it was hard to get all Numbers of all Objects because I want to be able to call all PLZ in a list and also check, if I have any number, to which Place it belongs. Maybe there is an obvious better way and I just don't know it.

Upvotes: 1

Views: 1599

Answers (1)

Anurag Dabas
Anurag Dabas

Reputation: 24314

try with boolean masking and map() method:

df[df['PLZ'].map(lambda x:8405 in x)]

OR

via boolean masking and agg() method:

df[df['PLZ'].agg(lambda x:8405 in x)]
#you can also use apply() in place of agg

output of above code:

    Place       PLZ                                             shortName   Parzellen
0   Winterthur  [8400, 8401, 8402, 8404, 8405, 8406, 8407, 840...   WIN     []

Upvotes: 3

Related Questions