Нужна помощь в определении частоты каждого числа в pandas кадре данных - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь найти простой способ преобразования pandas фрейма данных в другой фрейм данных с частотой каждой функции. Ниже я приведу пример того, что я пытаюсь сделать

Пример текущего фрейма данных (здесь метки объектов являются просто значениями индекса):

   0   1   2   3   4   ...   n
0  2   3   1   4   2         ~
1  4   3   4   3   2         ~
2  2   3   2   3   2         ~
3  1   3   0   3   2         ~
...
m  ~   ~   ~   ~   ~         ~

Фрейм данных Я хотел бы преобразовать это to:

   0   1   2   3   4   ...   n
0  0   1   2   1   1         ~
1  0   0   1   2   2         ~
2  0   0   3   2   0         ~
3  1   1   1   2   0         ~
...
m  ~   ~   ~   ~   ~         ~

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

Если потребуется дополнительная информация, я обновлю свой пост.

Ответы [ 2 ]

3 голосов
/ 17 марта 2020

Использование pd.value_counts с apply:

df.apply(pd.value_counts, axis=1).fillna(0)

     0    1    2    3    4
0  0.0  1.0  2.0  1.0  1.0
1  0.0  0.0  1.0  2.0  2.0
2  0.0  0.0  3.0  2.0  0.0
3  1.0  1.0  1.0  2.0  0.0

Альтернатива DataFrame.melt с pd.crosstab

df2 = df.T.melt()
pd.crosstab(df2['variable'], df2['value'])
1 голос
/ 17 марта 2020

Numpy

Значение этого параметра - скорость. Но ОЧЕНЬ сложнее.

n, k = df.shape
i = df.index.to_numpy().repeat(k)
j = np.ravel(df)
m = j.max() + 1

a = np.zeros((n, m), int)

np.add.at(a, (i, j), 1)

pd.DataFrame(a, df.index, range(m))

   0  1  2  3  4
0  0  1  2  1  1
1  0  0  1  2  2
2  0  0  3  2  0
3  1  1  1  2  0

Это создает индекс i, который будет соответствовать значениям в df, которые я назначаю j. Я буду использовать эти индексы для добавления единицы в позиции массива a, обозначенные индексами в i и j

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...