【问题标题】:Add a count unique combinations across rows in pandas在 pandas 中跨行添加计数唯一组合
【发布时间】:2021-08-16 05:37:25
【问题描述】:

我正在尝试查找行的唯一组合并将count 列作为int 引入。我们的想法是找到以下数据的唯一组合总数(最好在新数据框中)

id cat_1 cat_2 cat_3 cat_4
001 Chips Null Null Null
789 Chips Avocado Null Null
002 Chips Pasta Null Null
323 Chips Pasta Null Null
123 Chips Pasta Cheese Null
456 Chips Sauce Cheese Null
101 Pasta Null Null Null
231 Pasta Null Null Null
321 Pasta Bread Null Null
212 Pasta Bread Null Null
632 Pasta Cheese Null Null

我正在想象数据看起来像这样:

id cat_1 cat_2 cat_3 cat_4 count
0 Chips Null Null Null 1
1 Chips Pasta Null Null 2
2 Chips Pasta Cheese Null 1
4 Chips Sauce Cheese Null 1
5 Chips Avocado Null Null 1
6 Pasta Null Null Null 2
7 Pasta Bread Null Null 2
8 Pasta Cheese Null Null 1

我想我可以使用类似下面的东西,但是我的数据实际上有多达七个 cat_7,并且不确定这是否是正确的方法

df1.groupby(['cat_1','cat_2', 'cat_3', 'cat_4']).size().reset_index().rename(columns={0:'count'})

我怎样才能把它变成格式?

【问题讨论】:

    标签: pandas dataframe combinations


    【解决方案1】:

    我想是的,你可以使用:

    cols = df.columns.difference(['id']).tolist()
    #should working like
    #cols = ['cat_1','cat_2', 'cat_3', 'cat_4', 'cat_5', 'cat_6', 'cat_7']
    df = df.groupby(cols, sort=False).size().reset_index(name='count')
    print (df)
       cat_1    cat_2   cat_3 cat_4  count
    0  Chips     Null    Null  Null      1
    1  Chips  Avocado    Null  Null      1
    2  Chips    Pasta    Null  Null      2
    3  Chips    Pasta  Cheese  Null      1
    4  Chips    Sauce  Cheese  Null      1
    5  Pasta     Null    Null  Null      2
    6  Pasta    Bread    Null  Null      2
    7  Pasta   Cheese    Null  Null      1
    

    【讨论】:

    • 非常感谢您的回复。我认为挑战在于,当我像 df = df.groupby(['cat_1','cat_2', 'cat_3', 'cat_4', 'cat_5', 'cat_6', 'cat_7'], sort=False).size().reset_index(name='count') 对我的数据执行此操作时 - 它只返回我所有值的行?
    • @Tim - 是否需要删除类别中只有 NaNs 的行?
    • 不 - 它的任何行。
    【解决方案2】:

    DataFrame.value_counts

    df.drop('id', axis=1).value_counts(dropna=False).reset_index(name='count')
    

       cat_1    cat_2   cat_3 cat_4  count
    0  Chips    Pasta    Null  Null      2
    1  Pasta    Bread    Null  Null      2
    2  Pasta     Null    Null  Null      2
    3  Chips  Avocado    Null  Null      1
    4  Chips     Null    Null  Null      1
    5  Chips    Pasta  Cheese  Null      1
    6  Chips    Sauce  Cheese  Null      1
    7  Pasta   Cheese    Null  Null      1
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2017-01-26
      • 2023-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2020-09-01
      相关资源
      最近更新 更多