Вы можете применить функцию pd.Series.value_counts
к каждой строке, а затем после замены nan
s на ноль объединить счетчики ко второй оси вашего dataframe
.
>>> counts = qualityOfLife_df.apply(pd.Series.value_counts, axis=1)[['Up', 'Down', 'Same']].fillna(0)
>>> pd.concat((qualityOfLife_df, counts), axis=1)
City Crime Pollution Jobs Up Down Same
0 A Up Up Same 2.0 0.0 1.0
1 B Up Down Up 2.0 1.0 0.0
2 C Down Down Down 0.0 3.0 0.0
Также, как уже упоминалосьв комментарии вы можете использовать astype(int)
для преобразования чисел с плавающей точкой в целое число.Что бы я порекомендовал, для оптимизации памяти, если вы имеете дело с большими наборами данных, используйте меньший целочисленный тип, такой как np.int16
или np.int8
, в зависимости от максимального числа, которое может содержать счет.
>>> pd.concat((qualityOfLife_df, counts.astype(int)), axis=1)
City Crime Pollution Jobs Up Down Same
0 A Up Up Same 2 0 1
1 B Up Down Up 2 1 0
2 C Down Down Down 0 3 0