python-3.x - 我们如何对列中选定的行值进行分组并将其分配给 pandas df 中的新列?

标签 python-3.x pandas pandas-groupby

Id  B
1   6
2   13
1   6
2   6
1   6
2   6
1   10
2   6
2   6
2   6

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

Jan18.loc[Jan18['Enquiry Purpose']==6].groupby(Jan18['Member Reference']).transform('count')
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

最佳答案

比较值 Series.eq对于 ==,转换为整数并使用 GroupBy.transform对于由每组 sum 填充的新列:

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

通常根据您的条件创建 bool 掩码并在下面传递:

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

关于python-3.x - 我们如何对列中选定的行值进行分组并将其分配给 pandas df 中的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57493504/

相关文章:

python - Python 中类型注释的自引用或前向引用

python-3.x - 在 tkinter 中显示网格布局单元格

unix - 停止Python3在系统目录中创建模块缓存

python - 在基于 Django 类的 View 中访问主键

python-2.7 - 从 Pandas 数据帧保存没有双引号的csv文件

python - 删除以另一列的大值为条件的值

python - 如何将大于 RAM 限制的 gzip 文件导入 Pandas DataFrame? "Kill 9"使用 HDF5?

python - 如何解决 TypeError : sequence item 0: expected str instance, float found?

python - Pandas :GroupBy 到 DataFrame

python - 根据 pandas 中每个排序组的第一行创建一列