请考虑以下玩具数据:
dat = pd.DataFrame({'Year': [1,1,1,1,1,2,2,2,2,2],
'Type': ['a','a','b','b','b','a','a','a','b','b'],
'Status': ['ft','ft','ft','pt','pt','ft','ft','ft','ft','pt']})
我有兴趣创建一个汇总表,按年份分组,其中列根据我选择的字符串指定持有计数。例如,我想要一个如下所示的表:
result = pd.DataFrame({'Year': [1,2],
'Type_B_Count': [3,2],
'Status_FT_Count': [3,4]})
在R世界中,我会使用dplyr并得到我想要的结果:
result<-dat%>%
group_by(Year)%>%
summarise(Type_B_Count=sum(Type %in% c("b")),
Status_FT_Count=sum(Status %in% c("ft")))
理想情况下,我希望得到一个通用的答案,这样我就可以将代码转换为字符串搜索,而不会有太多的变化。
result<-dat%>%
group_by(Year)%>%
summarise(Type_B_Count=sum(grepl("b",Type)),
Status_FT_Count=sum(Status %in% c("ft")))
)
我已经看到了几个答案,似乎提供了感兴趣的变量的所有水平/组合的计数,但还没有找到这个特定问题的解决方案。
我可以想象类似的问题会经常被问到,但到目前为止还没有找到任何产生这种输出的结果,我在这里。任何关于这个问题的帮助/指导我正在寻找的信息将不胜感激。
1条答案
按热度按时间2w2cym1i1#
一个自定义聚合选项(
groupby.agg
):或者:
输出:
另一个使用字典的选项:
输出: