【问题标题】:i Need to Filter dataframe by some criteria i dont know how我需要按一些标准过滤数据框我不知道如何
【发布时间】:2020-05-27 02:17:53
【问题描述】:

我有一个这样的 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”并保留“苹果#2"

有人可以帮我吗?

【问题讨论】:

    标签: python pandas dataframe jupyter-notebook


    【解决方案1】:

    我们可以使用 groupbysum 然后 sort_valuesdrop_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'))]
    

    【讨论】:

    • 所以实际上这有帮助,但我不想白天丢失信息。像上面我丢失了 mt 时间序列,
    • @GlauberNaue 是您需要的吗? df[df['#numberfruits'].eq(df.groupby(['Date','Tree'])['#numberfruits'].transform('max'))]
    【解决方案2】:
    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
    

    【讨论】:

    • 所以实际上这有帮助,但我不想白天丢失信息。像上面一样,我丢失了 mt 时间序列,
    猜你喜欢
    • 2021-09-27
    • 2021-03-25
    • 2020-12-10
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多