Как показывать только многорядные результаты в сводных панд

#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

Как мне это сделать?