Что это за странное число, когда я использую функцию pivot в фрейме данных Pandas?

#python #pandas #dataframe #pivot-table

#питон #панды #фрейм данных #сводная таблица

Вопрос:

Это исходная структура фрейма данных

Я хочу агрегировать docvector как есть, упорядочив по unixReviewTime сгруппированному по reviewerID из исходного фрейма данных pandas выше. Код, который я написал, выглядит следующим образом.

 user_reviews = pd.pivot_table(df, index=["reviewerID","unixReviewTime"],values=["docvector"], aggfunc=lambda x: x)
 

В результате я получил этот странный фрейм данных user_reviews, который имеет цифры перед каждым docvector. Здесь 80839, 130296, 128549, 86624 на изображении ниже. Эти цифры отсутствуют в оригинале.

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

Что это за числа, зачем они созданы и как я могу создать сводную таблицу без этих чисел?

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

1. Вот что вызывает проблему: aggfunc=lambda x: x какую функцию агрегации вы хотите использовать? А как насчет столбца unixereviewtime? Вы тоже хотите сгруппироваться по этому поводу?

2. @IoaTzimas Я хочу сохранить docvector таким, какой он есть, поэтому я использовал эту функцию.

3. Почему бы просто не использовать сортировку? Нет необходимости использовать pivot без агрегации. Попробуйте df.sort_values(by=["reviewerID","unixReviewTime"])

4. @IoaTzimas Спасибо. Но я хочу использовать reviewerID в качестве индекса.

Ответ №1:

При использовании lambda x:x в качестве aggfunc x означает pd.Series для каждой группы, что в этом случае вызывает проблему

Одним из решений является использование x.iloc[0] для получения значения столбца docvector, учитывая, что в столбцах rest нет дубликатов (что, я полагаю, правильно, поскольку вы также не могли использовать lambda x:x)

Учитывая это, следующее должно работать правильно:

 user_reviews = pd.pivot_table(df, index=["reviewerID","unixReviewTime"],values=["docvector"], aggfunc=lambda x: x.iloc[0])
 

Ответ №2:

Я выяснил, в чем дело.

Проблема заключалась в aggfunc=lambda x: x том, что возвращаемый x с помощью lambda является объектом фрейма данных, который выглядит как показано ниже. Он включает индекс, значение и метаинформацию.

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

Так что использование aggfunc=lambda x: x.values или aggfunc=lambda x: x.to_numpy обоих работало в моем случае. aggfunc=lambda x: x.iloc[0] появилось только сообщение об ошибке «Функция не уменьшает». Большое спасибо за ваши внимательные комментарии!