【问题标题】:How to extract data using groupby under specific condition?如何在特定条件下使用 groupby 提取数据?
【发布时间】:2020-04-24 19:36:12
【问题描述】:

我有一个这样的数据集:

x = {'column1': ['a','a','b','b','b','c','c','c','d'],
    'column2': [1,0,1,1,0,1,1,0,1]
    }
df = pd.DataFrame(x, columns = ['column1', 'column2'])
print (df)

如何仅从第二列中提取值为 1 的数据(如下所示):

x = {'column1': ['a','b','b','c','c','d'],
    'column2': [1,1,1,1,1,1]
    }
df = pd.DataFrame(x, columns = ['column1', 'column2'])
print (df)

另外,我将如何计算第 1 列中每个值的 1 的数量,并创建一个新列并为 coulmn_1 中的各个索引插入该信息(例如,coulmn_1 中的索引值 a 有多少个 1?)。所以它将数据框转换为这种格式:

x = {'column1': ['a','b','b','c','c','d'],
    'column2': [1,1,1,1,1,1],
 'column3': [1,2,2,2,2,1]
    }
df = pd.DataFrame(x, columns = ['column1', 'column2','column3'])
print (df)

【问题讨论】:

    标签: python pandas numpy data-manipulation data-cleaning


    【解决方案1】:

    使用boolean indexingSeries.eq 进行比较,例如==,然后使用Series.mapSeries.value_counts

    df = df[df['column2'].eq(1)]
    df['column3'] = df['column1'].map(df['column1'].value_counts())
    

    GroupBy.transformGroupBy.size 的替代方案:

    df['column3'] = df.groupby('column1')['column1'].transform('size')
    

    print (df)
      column1  column2  column3
    0       a        1        1
    2       b        1        2
    3       b        1        2
    5       c        1        2
    6       c        1        2
    8       d        1        1
    

    最后一个默认索引使用DataFrame.reset_indexdrop=True

    df = df.reset_index(drop=True)
    print (df)
      column1  column2  column3
    0       a        1        1
    1       b        1        2
    2       b        1        2
    3       c        1        2
    4       c        1        2
    5       d        1        1
    

    【讨论】:

      【解决方案2】:

      第一个问题:

      df[df.column2==1].reset_index(drop=True)
      

      会给你

      
          column1     column2
      0   a   1
      1   b   1
      2   b   1
      3   c   1
      4   c   1
      5   d   1
      

      第二个问题:

      df['column3'] = df.groupby('column1').transform(len)
      

      会给你

      
          column1     column2     column3
      0   a   1   1
      1   b   1   2
      2   b   1   2
      3   c   1   2
      4   c   1   2
      5   d   1   1
      

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 2012-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-07
        相关资源
        最近更新 更多