代码之家  ›  专栏  ›  技术社区  ›  Eleanor

熊猫在列中计算元素并以重复方式显示

  •  0
  • Eleanor  · 技术社区  · 7 年前

    我想得到这样的东西。

    A
    1
    1
    2
    3
    3
    4
    4
    4
    4
    

    我想让它成为

    A   B
    1   2
    1   2
    2   1
    3   2
    3   2
    4   4
    4   4
    4   4
    4   4
    

    正如您在这里看到的,这些键是重复的,并且仍然与原始键的顺序相同。

    我知道如何使用数据在R中完成这项任务。table和我只知道如何使用groupby来获取熊猫的唯一键计数。

    有人有想法吗?

    非常感谢。

    4 回复  |  直到 7 年前
        1
  •  5
  •   rafaelc    7 年前

    您可以使用此选项:

    import pandas as pd
    
    df = pd.DataFrame({
        'A' : [1, 1, 2, 3, 3, 4, 4, 4, 4]
    })
    df['B'] = df.groupby(['A'])['A'].transform('count')
    
    print(df)
    

    输出:

       A  B
    0  1  2
    1  1  2
    2  2  1
    3  3  2
    4  3  2
    5  4  4
    6  4  4
    7  4  4
    8  4  4
    
        2
  •  3
  •   Simon    7 年前

    您可以使用groupby和merge:

    df = pd.DataFrame({'A' : [1, 1, 2, 3, 3, 4, 4, 4, 4]})
    
    df = df.merge(df.groupby('A').size().reset_index(), on='A')
    

    这将为您提供:

       A  0
    0  1  2
    1  1  2
    2  2  1
    3  3  2
    4  3  2
    5  4  4
    6  4  4
    7  4  4
    8  4  4
    
        3
  •  2
  •   piRSquared    7 年前

    快速方式使用 pd.factorize np.bincount

    f = df.A.factorize()[0]
    df.assign(B=np.bincount(f)[f])
    
       A  B
    0  1  2
    1  1  2
    2  2  1
    3  3  2
    4  3  2
    5  4  4
    6  4  4
    7  4  4
    8  4  4
    

    解释

    pd。因式分解 将创建一个整数数组,其中每个整数表示分解数组中的唯一值。这些整数从零开始。

    f
    
    array([0, 0, 1, 2, 2, 3, 3, 3, 3])
    

    NP二进制计数 将使用整数数组中的每个值,并计算该整数的显示次数。如果我们将这些整数视为bin,那么我们将计算每个bin被引用的次数。

    np.bincount(f)
    
    array([2, 1, 2, 4])
    

    最后,我们使用 f 对这些计数进行切片,以返回每次引用bin时重复的计数。

    np.bincount(f)[f]
    
    array([2, 2, 1, 2, 2, 4, 4, 4, 4])
    
        4
  •  2
  •   BENY    7 年前

    使用 map 具有 groupby size

    df['B']=df.A.map(df.groupby('A').size())
    df
    Out[630]: 
       A  B
    0  1  2
    1  1  2
    2  2  1
    3  3  2
    4  3  2
    5  4  4
    6  4  4
    7  4  4
    8  4  4