添加一个新列,其计数取决于 pandas 列表中的出现次数

chi*_*tra 3 python dataframe pandas

我有一个数据框,例如

Groups SP   Letters
G1     SP1  A
G1     SP1  Z
G1     SP1  A
G1     SP2  X
G1     SP3  X
G1     SP4  B
G2     SP2  A
G2     SP5  B
G2     SP3  X
G2     SP23 A
Run Code Online (Sandbox Code Playgroud)

我想添加一列( ),它是每个列表中唯一值Nb_column的计数SPGroupsLettersthe_list=['A','B']

在这里我应该得到:

Groups SP   Letters Nb_column
G1     SP1  A       2
G1     SP1  Z       2
G1     SP1  A       2
G1     SP2  X       2
G1     SP3  X       2
G1     SP4  B       2
G2     SP2  A       3
G2     SP5  B       3
G2     SP3  X       3
G2     SP23 A       3
Run Code Online (Sandbox Code Playgroud)

在哪里

  • 2 个 SPSP1、SP4),其中一个Letters代表the_listG1。和
  • 3 个 SPSP2、SP5SP23),其中一个Letters表示the_listG2。

有人对 pandas 有想法吗?

moz*_*way 5

您可以在 SP 的屏蔽版本上使用groupby+ transform+ nunique(默认情况下,NaN 不被计算在内nunique):

df['Nb_columns'] = (df['SP'].where(df['Letters'].isin(the_list))
                     .groupby(df['Groups']).transform('nunique')
                    )
Run Code Online (Sandbox Code Playgroud)

输出:

  Groups    SP Letters  Nb_columns
0     G1   SP1       A           2
1     G1   SP1       Z           2
2     G1   SP1       A           2
3     G1   SP2       X           2
4     G1   SP3       X           2
5     G1   SP4       B           2
6     G2   SP2       A           3
7     G2   SP5       B           3
8     G2   SP3       X           3
9     G2  SP23       A           3
Run Code Online (Sandbox Code Playgroud)