我有一个数据帧,如下所示:
col1 = ['a','b','c','a','c','a','b','c','a']
col2 = [1,1,0,1,1,0,1,1,0]
df2 = pd.DataFrame(zip(col1,col2),columns=['name','count'])
name count
0 a 1
1 b 1
2 c 0
3 a 1
4 c 1
5 a 0
6 b 1
7 c 1
8 a 0
我正在尝试计算'name‘列中每个元素对应的0和1的数量。因此,预期的输出将如下所示:
name zero_count one_count
a 2 2
b 0 2
c 1 2
到目前为止,我尝试了许多方案,其中一个看起来很有希望的方案是:
ser = df2.groupby(['name','count']).size().to_frame().reset_index()
ser
name count 0
0 a 0 2
1 a 1 2
2 b 1 2
3 c 0 1
4 c 1 2
我已经跌到了谷底。无法找到解决此问题的方法。你能帮帮我吗。
发布于 2020-10-18 15:52:39
试试crosstab
pd.crosstab(df2['name'], df2['count'])
Out[40]:
count 0 1
name
a 2 2
b 0 2
c 1 2
发布于 2020-10-18 15:51:59
一行:
In [982]: df2.groupby(['name','count']).size().reset_index().pivot('name', 'count')
Out[982]:
0
count 0 1
name
a 2.0 2.0
b NaN 2.0
c 1.0 2.0
按部就班解释:
In [950]: res = df2.groupby(['name','count']).size().reset_index(name='counts')
In [958]: out = res.pivot(index='name', columns='count', values='counts').fillna(0)
In [959]: out.columns = ['zero_count', 'one_count']
In [960]: out
Out[960]:
zero_count one_count
name
a 2.0 2.0
b 0.0 2.0
c 1.0 2.0
发布于 2020-10-18 16:12:01
#count zeros:
df2.groupby(['name']).agg(lambda x: x.eq(0).sum())
#count ones:
df2.groupby(['name']).agg(lambda x: x.eq(1).sum())
https://stackoverflow.com/questions/64415209
复制