python-3.x 基于其他列的计数创建新列

ldxq2e6h  于 2023-02-14  发布在  Python
关注(0)|答案(2)|浏览(118)

我有一个Pandas的数据框看起来像

col_1   col_2
6       A       
2       A       
5       B       
3       C       
5       C       
3       B       
6       A       
6       A       
2       B       
2       C       
5       A       
5       B

我想添加一个新列col_new,它计算col_1col_2中元素相同的行数,但不包括该行本身。

col_1   col_2   col_new
6       A       2
2       A       0
5       B       1
3       C       0  
5       C       0
3       B       0
6       A       2
6       A       2
2       B       0
2       C       0
5       A       0
5       B       1

这里是什么,我尝试了,但我不确定这是否是正确的方法:
df['col_new'] = df.groupby(['col_1', 'col_2']).count()
但是我得到了错误:TypeError: incompatible index of inserted column with frame index
先谢了。

h9a6wy2h

h9a6wy2h1#

您可以用途:

df['col_new'] = df.groupby(['col_1', 'col_2'])['col_2'].transform('count').sub(1)

输出:

col_1 col_2  col_new
0       6     A        2
1       2     A        0
2       5     B        1
3       3     C        0
4       5     C        0
5       3     B        0
6       6     A        2
7       6     A        2
8       2     B        0
9       2     C        0
10      5     A        0
11      5     B        1
yhived7q

yhived7q2#

我会使用value_counts方法。

  • 创建一个名为col3的第三列,并存储行值的元组。元组与列表不同,它是可散列的,可用于创建计数键。
df["col3"] = df.apply(lambda x: (x[0], x[1]), axis = 1)
col_1 col_2    col3                                                                                              
  0       6     A    (6, A)                                                                                              
  1       2     A    (2, A)                                                                                              
  2       5     B    (5, B)                                                                                             
  3       3     C    (3, C)                                                                                              
  4       5     C    (5, C)                                                                                              
  5       3     B    (3, B)                                                                                              
  6       6     A    (6, A)                                                                                              
  7       6     A    (6, A)                                                                                              
  8       2     B    (2, B)                                                                                              
  9       2     C    (2, C)                                                                                              
  10      5     A    (5, A)                                                                                              
  11      5     B    (5, B)
  • 为值计数创建一个Series。这将用作查找表。

一个二个一个一个

  • 将每行Map到名为counts的第四列
df["counts"] = df["col3"].map(value_counts)
col_1 col_2    col3  counts
  0       6     A  (6, A)       3
  1       2     A  (2, A)       1
  2       5     B  (5, B)       2
  3       3     C  (3, C)       1
  4       5     C  (5, C)       1
  5       3     B  (3, B)       1
  6       6     A  (6, A)       3
  7       6     A  (6, A)       3
  8       2     B  (2, B)       1
  9       2     C  (2, C)       1
  10      5     A  (5, A)       1
  11      5     B  (5, B)       2

相关问题