3 回答

TA贡献2016条经验 获得超9个赞
df_input.groupby('col_cate')['target_bool'].value_counts()
col_cate target_bool
A False 2
True 2
B False 2
True 2
然后你可以 reset_index()

TA贡献1825条经验 获得超6个赞
因为函数GroupBy.count
用于计算具有排除缺失值的值,如果存在是必要的,请在 groupby 之后指定列,如果两列都用于by
参数 in groupby
:
df = (df_input.groupby(by=["col_cate", "target_bool"])['col_cate']
.count()
.reset_index(name='cnt'))
print (df)
col_cate target_bool cnt
0 A False 2
1 A True 2
2 B False 2
3 B True 2
如果要计算所有列,如果指定两列,则两者都是可能的(但这里总是相同的输出):
df1 = (df_input.groupby(["col_cate", "target_bool"])[['col_cate','target_bool']]
.count()
.add_suffix('_count')
.reset_index())
print (df1)
col_cate target_bool col_cate_count target_bool_count
0 A False 2 2
1 A True 2 2
2 B False 2 2
3 B True 2 2
或者如果使用 GroupBy.size方法它的工作方式有点不同 - 它计算所有值,不排除丢失,因此不需要指定列:
df = df_input.groupby(["col_cate", "target_bool"]).size().reset_index(name='cnt')
print (df)
col_cate target_bool cnt
0 A False 2
1 A True 2
2 B False 2
3 B True 2

TA贡献1856条经验 获得超11个赞
也像这样:
In [54]: df_input.groupby(df_input.columns.tolist()).size().reset_index().\
...: rename(columns={0:'cnt'})
Out[54]:
col_cate target_bool cnt
0 A False 2
1 A True 2
2 B False 2
3 B True 2
添加回答
举报