我有这样一个 Dataframe :
df = pd.DataFrame({
'org':['a','a','a','a','b','b'],
'product_version':['bpm','bpm','bpm','bpm','ppp','ppp'],
'release_date':['2022-07','2022-07','2022-07','2022-07','2022-08','2022-08'],
'date_avail':['no','no','no','yes','no','no'],
'status':['green','green','yellow','yellow','green','green']
})
看起来像这样
org product_version release_date date_avail status
0 a bpm 2022-07 no green
1 a bpm 2022-07 no green
2 a bpm 2022-07 no yellow
3 a bpm 2022-07 yes yellow
4 b ppp 2022-08 no green
5 b ppp 2022-08 no green
我希望得到按列['org','product_version','release_date']
分组后的总计数,这很简单:
print(df.groupby(['org','product_version','release_date']).size())
org product_version release_date
a bpm 2022-07 4
b ppp 2022-08 2
然而,我还想从这个组中获取未分组的其他列的不同值的子计数。例如,具有4
作为总计数的第一组是a bpm 2022-07
。对于列date_avail
,该组具有3
、no
和1
、yes
;对于列status
,该组具有2
、green
和2
、yellow
。
因此,我所需的表结果如下所示:
org product release_date total number_of_no number_of_yes number_of_green number_of_yellow
a bpm 2022-07 4 3 1 2 2
b ppp 2022-08 2 2 0 2 0
4条答案
按热度按时间lkaoscv71#
您可以在分组的 Dataframe 中使用
agg
方法来计算每个组的多个聚合函数。假设唯一可能的颜色是绿色和黄色,则如下所示:输出:
7ivaypg92#
您可以使用
value_counts
和groupby
而且你不需要担心要聚合和求和的列中的值,你只需要使用value_counts就可以了。
或者您可以像这样使用
pd.crosstab
:ncgqoxb03#
下面是使用
pd.get_dummies()
的方法qoefvg9y4#
使用单个
df.groupby
,并使用每个组的 * 总计 * 和 * 值计数 * 构造内部pd.Series
: