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