【问题标题】:How to filter dataframe by splitting categories of a columns into sets?如何通过将列的类别拆分为集合来过滤数据框?
【发布时间】:2020-01-11 08:17:55
【问题描述】:

我有一个数据框:

Prop_ID    Unit_ID      Prop_Usage                     Unit_Usage
1          1            RESIDENTIAL                    RESIDENTIAL
1          2            RESIDENTIAL                    COMMERCIAL
1          3            RESIDENTIAL                    INDUSTRIAL
1          4            RESIDENTIAL                    RESIDENTIAL
2          1            COMMERCIAL                     RESIDENTIAL
2          2            COMMERCIAL                     COMMERCIAL
2          3            COMMERCIAL                     COMMERCIAL
3          1            INDUSTRIAL                     INDUSTRIAL
3          2            INDUSTRIAL                     COMMERCIAL
4          1            RESIDENTIAL - COMMERCIAL       RESIDENTIAL
4          2            RESIDENTIAL - COMMERCIAL       COMMERCIAL
4          3            RESIDENTIAL - COMMERCIAL       INDUSTRIAL
5          1            COMMERCIAL / RESIDENTIAL       RESIDENTIAL
5          2            COMMERCIAL / RESIDENTIAL       COMMERCIAL
5          3            COMMERCIAL / RESIDENTIAL       INDUSTRIAL
5          4            COMMERCIAL / RESIDENTIAL       COMMERCIAL

一个属性可能有超过 1 个单位。这意味着单位是属性的子类别。我想过滤Prop_UsageUnit_Usage 不匹配的行。我们在Prop_Usage 列中有一个类别RESIDENTIAL - COMMERCIAL,然后Unit_Usage 可以是RESIDENTIALCOMMERCIALCOMMERCIAL / RESIDENTIAL 也是如此。

预期输出:

Prop_ID    Unit_ID      Prop_Usage                   Unit_Usage
1          2            RESIDENTIAL                  COMMERCIAL
1          3            RESIDENTIAL                  INDUSTRIAL
2          1            COMMERCIAL                   RESIDENTIAL
3          2            INDUSTRIAL                   COMMERCIAL
4          3            RESIDENTIAL - COMMERCIAL     INDUSTRIAL
5          3            COMMERCIAL / RESIDENTIAL     INDUSTRIAL

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    DataFrame.apply 中使用in 语句:

    df = df[~df.apply(lambda x: x['Unit_Usage'] in x['Prop_Usage'], axis=1)]
    

    或者在列表理解中使用zip

    df = df[[not a in b for a, b in zip(df['Unit_Usage'], df['Prop_Usage'])]]
    

    print (df)
        Prop_ID  Unit_ID                Prop_Usage   Unit_Usage
    1         1        2               RESIDENTIAL   COMMERCIAL
    2         1        3               RESIDENTIAL   INDUSTRIAL
    4         2        1                COMMERCIAL  RESIDENTIAL
    8         3        2                INDUSTRIAL   COMMERCIAL
    11        4        3  RESIDENTIAL - COMMERCIAL   INDUSTRIAL
    14        5        3  COMMERCIAL / RESIDENTIAL   INDUSTRIAL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2023-03-08
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多