为了账号安全,请及时绑定邮箱和手机立即绑定

带过滤器的聚合数据框

带过滤器的聚合数据框

UYOU 2023-09-05 21:13:36
pandas 是否可以使用“NamedAgg”方法进行过滤?这是我的示例代码:df = pd.DataFrame({'Person': ['John','Paul','John','Paul','Taylor'],                   'animal': ['cat', 'dog', 'cat', 'dog','dog'],                   'from' : ['breeder','adoption','adoption','breeder','wild'],                   'height': [9.1, 6.0, 9.5, 34.0,55],                   'weight': [7.9, 7.5, 9.9, 198.0,200]})df.groupby(['Person']).agg(    number_of_animal = pd.NamedAgg(column = 'animal', aggfunc = 'count'),    number_of_from = pd.NamedAgg(column = 'from', aggfunc = 'count'),    total_height = pd.NamedAgg(column = 'height', aggfunc = 'sum'),    total_weight = pd.NamedAgg(column = 'weight', aggfunc = 'sum')    )result = pd.DataFrame({'Person': ['John','Paul','Taylor'],                        'number_of_animal':[2,0,0],                        'number_of_from': [1,1,0],                        'total_height':[0,34,55],                        'total_weight':[17.8,205.5,200]})对于每个单独的列,我想应用一个过滤器,例如我想过滤“number_of_animal”df['animal'] == 'cat'和“total_hight”df['height'] > 10和 number_of_fromdf['from'] == 'breeder
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

使用DataFrame.assignfor reasign 将不匹配的值替换为NaN中的 s Series.where

df1 = (df.assign(animal = df['animal'].where(df['animal'] == 'cat'),

                 height = df['height'].where(df['height'] > 10),

                 from1 = df['from'].where(df['from'] == 'breeder')

                )

        .groupby(['Person']).agg(

                 number_of_animal = pd.NamedAgg(column = 'animal', aggfunc = 'count'),

                 number_of_from = pd.NamedAgg(column = 'from1', aggfunc = 'count'),

                 total_height = pd.NamedAgg(column = 'height', aggfunc = 'sum'),

                 total_weight = pd.NamedAgg(column = 'weight', aggfunc = 'sum')

    ))

print (df1)

        number_of_animal  number_of_from  total_height  total_weight

Person                                                              

John                   2               1           0.0          17.8

Paul                   0               1          34.0         205.5

Taylor                 0               0          55.0         200.0


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信