#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
конца. Остальное предназначено исключительно для эстетических целей.