Преобразование табличных данных в столбцы и подсчет по частоте

#python #pandas #reshape

#python #pandas #изменение формы

Вопрос:

У меня есть фрейм данных в следующем виде:

введите описание изображения здесь

форма 2326 x 1271

Имена столбцов просто сериализуются с 0-1269, а строки — это категории, которые могут повторяться, как «apple» в примере. Внутренние точки данных могут представлять что угодно (допустим, в этом примере они представляют хранилища), и я пытаюсь преобразовать их в столбцы, и точки данных становятся количеством раз, когда эта категория отображается в этом «хранилище». Визуально, вот таблица, к которой я пытаюсь добраться:

введите описание изображения здесь

Обратите внимание, что Apple отображается в AA и RR дважды

Комментарии:

1. попробуйте функции pivot или pivot_table

Ответ №1:

Используйте stack вместе с crosstab для вычисления количества частот:

Данные:

 index= ['Apple', 'Orange', 'Apple', 'Banana', 'Kiwi']
data = [['AA', 'DD', 'RR', ''], ['DD', 'PP', '', ''], 
        ['AA', 'RR', 'TT', 'SS'], ['EE', 'NN', '',''], ['NN', 'WW','', '']]
frame = pd.DataFrame(data, index, columns=np.arange(4))
frame
  

Изображение

Операции:

 df = frame.stack().reset_index(0, name='values')
df = pd.crosstab(df['level_0'], df['values']).drop('', axis=1).replace(0, '')
df.index.name=None; df.columns.name=None
df
  

Изображение

Комментарии:

1. Это может быть победителем. Один вопрос, что происходит после «.drop (…)»? Выдает мне ошибку «‘ ‘ не содержится в оси», когда я ее сохраняю, но, похоже, не работает без полного удаления и переименования

2. Я думаю, вы можете .drop('', axis=1) вообще отказаться. Причина, по которой это было использовано, заключалась в том, что после выполнения операции был создан дополнительный столбец crosstab . Он прекрасно работает и без этого. Посмотрите, работает ли это до crosstab конца. Остальное предназначено исключительно для эстетических целей.