Как посчитать вхождение каждого уникального значения в панды

У меня есть большой пандас dataframe, я хотел бы подсчитать вхождение каждого уникального значения в него, я стараюсь следовать, но это занимает много времени и использования памяти. Как я могу сделать это питонским способом?

pack=[]
for index,row in packets.iterrows ():
    pack.extend(pd.Series(row).dropna().values.tolist())

unique, count= np.unique(pack, return_counts=True)
counts= np.asarray((unique, count))

1 ответ

Решение

Похоже, вы хотите вычислить значения значений для всех столбцов. Вы можете сгладить его в серии, сбросить NaNs и позвонить value_counts, Вот образец -

df

     a    b
0  1.0  NaN
1  1.0  NaN
2  3.0  3.0
3  NaN  4.0
4  5.0  NaN
5  NaN  4.0
6  NaN  5.0
pd.Series(df.values.ravel()).dropna().value_counts()

5.0    2
4.0    2
3.0    2
1.0    2
dtype: int64

Другой метод с np.unique -

u, c = np.unique(pd.Series(df.values.ravel()).dropna().values, return_counts=True)
pd.Series(c, index=u)

1.0    2
3.0    2
4.0    2
5.0    2
dtype: int64

Обратите внимание, что первый метод сортирует результаты по убыванию, а последний - нет.

Другие вопросы по тегам