Мне нужно отфильтровать фрейм данных по некоторым критериям, я не знаю как - PullRequest
0 голосов
/ 27 мая 2020

У меня такой df

Date   Tree   Type #numberfruits
01/01  Apple   #1      10
01/01  Apple   #2      05
01/01  Orange  #1      10
02/01  Apple   #1      15
02/01  Apple   #2      40
02/01  Orange  #1      10
 ...

хочу отфильтровать «Тип», чтобы оставить только те типы деревьев, которые дают наибольшее количество плодов за все дни вместе взятые. Что касается апельсина, у меня только один, поэтому «Апельсин №1» - это дерево, которое дает больше всего апельсинов за все дни вместе взятые.

Но в случае Apple у меня есть два типа: №1 и №2 и в этом случае я хочу отказаться от Типа, который производит меньше яблок в приведенном выше случае, я хочу удалить «Apple # 1» и оставить «Apple # 2»

Может кто-нибудь мне помочь?

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Мы можем сделать groupby с sum, затем sort_values withy drop_duplicates

s=df.groupby(['Tree','Type'],as_index=False)['#numberfruits'].sum().sort_values('#numberfruits').drop_duplicates('Tree',keep='last')
     Tree Type  #numberfruits
2  Orange   #1             20
1   Apple   #2             45

Обновить

s=df[df['#numberfruits'].eq(df.groupby(['Date','Tree'])['#numberfruits'].transform('max'))]
2 голосов
/ 27 мая 2020
df = df.groupby(['Tree','Type'])['#numberfruits'].sum().reset_index(name='count')

df.sort_values(by='count', ascending=False).drop_duplicates(subset='Tree',keep='first')

    Tree    Type    count
1   Apple   #2      45
2   Orange  #1      20
...