Python 3.x 如何按列中选定的行值分组,并将其分配给df中的新列?

Python 3.x 如何按列中选定的行值分组,并将其分配给df中的新列?,python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我想要一个新的列,比如说C,在那里我可以在Id级别获得B=6的分组值 Id B 1 6 2 13 1 6 2 6 1 6 2 6 1 10 2 6 2 6 2 6 Comapre value by for=,转换为整数,并用于由sum填充的新列,每组: Id B No_of_6 1 6 3 2 13 5 1 6 3 2 6 5 1 6 3 2 6 5 1 10 3 2 6 5 2 6

我想要一个新的列,比如说
C
,在那里我可以在
Id
级别获得
B=6
的分组值

Id  B
1   6
2   13
1   6
2   6
1   6
2   6
1   10
2   6
2   6
2   6
Comapre value by for
=
,转换为整数,并用于由
sum
填充的新列,每组:

Id  B   No_of_6
1   6   3
2   13  5
1   6   3
2   6   5
1   6   3
2   6   5
1   10  3
2   6   5
2   6   5
2   6   5
通常根据您的条件创建布尔掩码,并通过以下步骤:

df['No_of_6'] = df['B'].eq(6).astype(int).groupby(df['Id']).transform('sum')
#alternative
#df['No_of_6'] = df.assign(B= df['B'].eq(6).astype(int)).groupby('Id')['B'].transform('sum')
print (df)
   Id   B  No_of_6
0   1   6        3
1   2  13        5
2   1   6        3
3   2   6        5
4   1   6        3
5   2   6        5
6   1  10        3
7   2   6        5
8   2   6        5
9   2   6        5

使用
map
的解决方案。此解决方案将在
Id
没有编号
6的组上返回
NaN

mask = df['B'].eq(6)
#alternative
#mask = (df['B'] == 6)
df['No_of_6'] = mask.astype(int).groupby(df['Id']).transform('sum')

如果我想使用多个条件,比如B=6&B=5 | B=7,该怎么办?@Abhaykumar-添加了一般解决方案-只需像您一样更改
mask
need@jottbe-没有,因为熊猫开发者在熊猫0.25中与虫子打交道,所以没有时间回答。;)对我来说,编码就像业余爱好;)
mask = df['B'].eq(6)
#alternative
#mask = (df['B'] == 6)
df['No_of_6'] = mask.astype(int).groupby(df['Id']).transform('sum')
df['No_of_6'] = df.Id.map(df[df.B.eq(6)].groupby('Id').B.count())

Out[113]:
   Id   B  No_of_6
0   1   6        3
1   2  13        5
2   1   6        3
3   2   6        5
4   1   6        3
5   2   6        5
6   1  10        3
7   2   6        5
8   2   6        5
9   2   6        5