【问题标题】:filter in groupby for only like columns python在 groupby 中过滤,仅用于类似的列 python
【发布时间】:2018-06-26 03:05:52
【问题描述】:

我希望通过将列减少为仅具有 1 个唯一值的列来过滤数据框。

获取以下数据框:

df = pd.DataFrame({'id':[4, 5],
                     'id2':[4, 4],
                      'prod':['prod1', 'prod1'],
                      'amount':[45.0, 45.0],
                      'date':['2018-06-06', '2018-05-06'],
                      'region':['east', 'east']})

我想按 id2 分组,然后删除任何包含超过 1 个唯一值的列。

df
   amount        date  id  id2   prod region
0    45.0  2018-06-06   4    4  prod1   east
1    45.0  2018-05-06   5    4  prod1   east

输出应如下所示:

   amount  id2   prod region
0    45.0    4  prod1   east
1    45.0    4  prod1   east

【问题讨论】:

    标签: python pandas filter


    【解决方案1】:

    您需要groupby,然后查找唯一值等于 1 的列。

    col = (df.groupby(['id2']).nunique() == 1).any()
    df[col.index[col]]
    

    输出:

      id2   prod    amount  region
    0   4   prod1   45.0    east
    1   4   prod1   45.0    east
    

    【讨论】:

    • 'DataFrameGroupBy' 对象没有属性 'nunique'
    • @MattW。你用的是哪个版本的熊猫?
    • '0.19.2' - 我正在尝试在我的 conda 环境中更新 pandas,它说 Solving environment: done # All requested packages already installed.
    • 如果您对最新版本有任何问题,请告诉我。
    【解决方案2】:

    您也可以不使用 groupby,因为 id2 有一个唯一值。

    # count unique values per column
    d = df.nunique(axis=0)
    
    # select columns with 1 unique value
    names = d[d == 1].index.tolist()
    
    # get outpput
    print(df[names])
    
       amount  id2   prod region
    0    45.0    4  prod1   east
    1    45.0    4  prod1   east
    

    【讨论】:

    • 短版:df[df.columns[df.nunique() == 1]]
    • 得到错误:'DataFrame' 对象没有属性'nunique',而且我有大约 100k 行,所以我需要 groupby,因为我想按每个组执行此操作。只是没有在示例中添加。
    【解决方案3】:

    loc 内以利用布尔索引

    df.loc[:, df.nunique().eq(1)]
    
       id2   prod  amount region
    0    4  prod1    45.0   east
    1    4  prod1    45.0   east
    

    类似的答案,但改用lambda。这避免了依赖于两次引用df 并且完全内联。

    df.loc[:, lambda d: d.nunique().eq(1)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2013-07-10
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多