#python #pandas #dataframe #pivot-table
#python #pandas #фрейм данных #сводная таблица
Вопрос:
Полный новичок, впервые публикующий. Мой фрейм данных:
Я запускаю этот код поверх него
pivot_df = pd.pivot_table(shop_df, index=['Fruits', 'Location', 'Readiness'], values='Price')
и это правильно дает сводный результат:
Однако я хотел бы, чтобы только многострочные результаты отображались следующим образом
Как мне этого добиться?
Комментарии:
1. Создайте небольшие образцы вашего фрейма данных и поместите их сюда таким образом, чтобы их можно было скопировать в текстовом редакторе
Ответ №1:
Входные данные берутся из @DNay в ответе. Сбросьте pivot_df.
pivot_df = pivot_df.reset_index()
Подсчитайте количество фруктов, как в groupby.
ndf = pd.DataFrame(pivot_df.groupby('Fruits')['Location'].count()).reset_index()
ndf.columns=['Fruits', 'Count']
Выберите только фрукты, которые имеют более одной строки.
pivot_df[pivot_df['Fruits'].isin(list(ndf.loc[ndf['Count'] > 1, 'Fruits']))]
Комментарии:
1. Спасибо, Рутгер. Я не понимаю строку ndf.columns=[‘Fruits’, ‘Location’], и это дает ValueError: несоответствие длины: ожидаемая ось имеет 4 элемента, новые значения имеют 2 элемента
2. @DNay: я только что изменил его, теперь он должен работать. Не могли бы вы запустить его снова?
3. Отлично! Это избавляет от всех одиночных строк в фрейме данных и приближает меня к тому, что я хочу! Спасибо!
Ответ №2:
Спасибо, Дани, дай мне попробовать. Это поток данных:
import pandas as pd
shop_df = pd.DataFrame({
'Order_ID' : [232, 344, 452],
'Fruits' : ['Apples', 'Apples', 'Pairs'],
'Cultivar' : ['Cripps Pink', 'Braeburn', 'Bosc'],
'Readiness' : ['Green', 'Irrelevant', 'Matured'],
'Price' : [11, 12, 8],
'Location' : ['Lost', 'Sold Out', 'Warehouse'],
'Source' : ['Bobs Farm', 'Bettys', 'Bettys']})
shop_df.set_index(['Order_ID'], inplace=True)
shop_df.sort_index(inplace=True)
Это сводная команда над моим фреймом данных:
pivot_df = pd.pivot_table(shop_df, index=['Fruits', 'Location', 'Readiness'], values='Price')
но это дает результат с 3 строками 1, но я хочу видеть только две первые, только для яблок (без пар).2
Как мне это сделать?