#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]
появилось только сообщение об ошибке «Функция не уменьшает». Большое спасибо за ваши внимательные комментарии!