这是我的数据框
# Ignore all
*
# Unignore directories
!*/
# Unignore source code files
!source/**/*.c
!source/**/*.h
我想计算在每个群集中选择的每个字母,并按群集分组。
我尝试了这个:
df = pd.DataFrame([
('a', 0, 0),
('b', 1, 1),
('c', 1, 0),
('d', 2, 1),
('e', 2, 1)
], columns=['name', 'cluster', 'is_selected'])
我得到这个输出:
df.groupby('cluster')['is_selected'].value_counts()
但是我想要的是这种格式:
cluster is_selected
0 0 1
1 0 1
1 1
2 1 2
Name: is_selected, dtype: int64
请问我该如何解决?
答案 0 :(得分:1)
根据您的解释,您要计算按簇分组的所选字母(is_selected
中的值为1)。
如果这就是您要寻找的东西,那么应该会有所帮助:
df[df.is_selected == 1].groupby(['cluster'])['name'].count().reset_index(name='count_selected')
输出有些不同,但是我还是不完全确定是什么导致您的群集0的预期输出计数为1,所以我希望是这样!
输出:
cluster count_selected
0 1 1
1 2 2
答案 1 :(得分:1)
这应该给出预期的输出:
df.where(df['is_selected'] == 1).groupby('cluster')['is_selected'].count().rename(
'count_selected').reindex(df['cluster'].drop_duplicates()).fillna(0).astype(int).reset_index()