【问题标题】:drop entire pandas group based on condition根据条件删除整个熊猫组
【发布时间】:2020-11-28 04:05:02
【问题描述】:

我有这个 df:

       Plate       Route        Speed       Dif     hour
0      0660182      RUTA 66     10          NaN     13
1      939CH001M    RUTA 51     22          33.0    13
2      596NZ008M    RUTA 102    0           34.0    13
3      0790024      RUTA 79     0           33.0    13
4      947CH045M    RUTA 50     28          33.0    13
...     ...     ...     ...     ...     ...
1279634 0120414     RUTA 12     0           NaN     5
1279635 1090016     200826      0           NaN     5
1279636 0350144     RUTA 35     0           NaN     5
1279637 006908      RUTA 106    0           NaN     5
1279638 0340071     RUTA 34     1           NaN     5

每当“Dif”为 60 或更多时,我想过滤板组(每个板有很多寄存器)。因此,使用此处的帖子,我尝试了:

f = lambda df: not df[df['Dif'] < 60].empty
filtered = df.groupby('Plate').filter(f)

我仍然得到这个 groupby 的 Dif 值超过 60。这里有什么问题?否则,如何使用 groupby 进行此过滤? (尝试使用大于,以防我的逻辑失败,但仍然无法得到它)。

感谢您的帮助。

【问题讨论】:

    标签: pandas pandas-groupby filtering


    【解决方案1】:

    你可以使用groupby.transform:

    # only select groups whose `Dif` are all < 60
    mask = (df['Dif']<60).groupby(df['Plate']).transform('all')
    df[mask]
    

    或者你的函数:

    f = lambda df: (df['Dif']<60).all()
    filtered = df.groupby('Plate').filter(f)
    

    请注意,您的原始函数将保留至少一个Dif all。

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 2021-07-18
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2020-05-16
      相关资源
      最近更新 更多