Нужно boolean indexing
с loc
и логическими масками - сравните столбец DataFrame
со значением 0
, а не с одним списком элементов [alone]
:
tdf.loc[tdf['alone'] > 0, 'alone'] = 'with family'
tdf.loc[tdf['alone'] ==0, 'alone'] = 'alone'
Если возможны не отрицательные числа, используйте numpy.where
:
tdf['alone'] = np.where(tdf['alone'] == 0, 'alone', 'with family')
Sample
tdf = pd.DataFrame({'alone':[4,4,5,0,5,0],
'col':[1,1,9,4,2,3]})
print (tdf)
alone col
0 4 1
1 4 1
2 5 9
3 0 4
4 5 2
5 0 3
tdf['alone'] = np.where(tdf['alone'] == 0, 'alone', 'with family')
print (tdf)
alone col
0 with family 1
1 with family 1
2 with family 9
3 alone 4
4 with family 2
5 alone 3
Также решение является неправильным, потому что цепочечные назначения - это может создать копию, которая обновляет копию tdf['alone']
, которую вы не увидите:
#added boolean mask tdf['alone'] > 0
tdf['alone'].loc[tdf['alone'] > 0 ]= 'with family'