python中的summary(dplyr)函数

python中的summary(dplyr)函数,python,r,pandas,Python,R,Pandas,我有一个panda数据帧df,我希望通过变量“house”进行分组,并在其他三个变量中执行特定操作:“var1”、“var2”和“var3”。Suposse这三个变量是数值型的,“var1”取值为1,2,3 data = {'house':['A', 'B', 'A', 'A', 'B', 'B', 'B'], 'var1':[3, 0, 1, 3,4,5,3], 'var2':[2, 0, 5, 1,4,1,3],'var3':[4, 2, 3, 3,0,5,1]} df = pd.DataF

我有一个panda数据帧df,我希望通过变量“house”进行分组,并在其他三个变量中执行特定操作:“var1”、“var2”和“var3”。Suposse这三个变量是数值型的,“var1”取值为1,2,3

data = {'house':['A', 'B', 'A', 'A', 'B', 'B', 'B'], 'var1':[3, 0, 1, 3,4,5,3], 'var2':[2, 0, 5, 1,4,1,3],'var3':[4, 2, 3, 3,0,5,1]}
df = pd.DataFrame(data) 
df
现在,我想创建3个新变量

  • new_var1=计算var3获取值的次数==3
  • new_var2=总和var2(简单聚合)
  • new_var3=总和var3(简单聚合)
  • 如果我使用的是R编程语言,我会立即这样做

    require(dplyr)
    data = data.frame('house'=c('A', 'B', 'A', 'A', 'B', 'B', 'B'), 
            'var1'=c(3, 0, 1, 3,4,5,3), 
            'var2'=c(2, 0, 5, 1,4,1,3),
            'var3'=c(4, 2, 3, 3,0,5,1))
    
    df= data %>% group_by(house) %>% summarise(new_var1 = sum(var1 == 3),
                                           new_var2 = sum(var2),
                                           new_var2 = sum(var2))
    df
    
    在python中,首先,我按分组

    df.groupby(['house'])['var1','var2', 'var3']
    

    但是我想继续写同一行代码,我不知道怎么做。python中有一些类似的“summary”函数?

    您可以使用
    agg
    方法来实现这一点

    (df.groupby(['house']).agg({'var1': lambda x: (x==3).sum(), 
                                'var2': 'sum',
                                'var3': 'sum'})
       .rename(columns={"var1": "new_var1", 
                        "var2": "new_var2",
                        "var3":"new_var3"})
    )
    

    我一直在从
    python
    中的
    R
    移植数据包(
    dplyr
    tidyr
    tibble
    ,等等):

    如果您熟悉R中的这些软件包,并希望在python中应用它,那么这里就是为您准备的:

    从数据导入f
    从datar.all导入*
    数据=TIBLE(
    房屋=c('A','B','A','A','B','B','B'),
    var1=c(3,0,1,3,4,5,3),
    var2=c(2,0,5,1,4,1,3),
    var3=c(4,2,3,3,0,5,1)
    )
    df=数据>>分组依据(f.house)>>总结(新变量1=总和(f.var1==3),
    new_var2=总和(f.var2),
    新变量3=总和(f.var3))
    打印(df)
    
    输出:

      house  new_var1  new_var2  new_var3
    0     A         2         8        10
    1     B         1         8         8
    

    回答得好,希望你不介意我重新格式化了一点。另外,使用
    'sum'
    x。sum()
    可能比
    sum
    快。这很有趣。如果我去掉括号,我会得到一个错误。为什么变量的顺序不是new_var1、new_var2和new_var3?对不起,现在我意识到了括号错误。忽略注释。需要括号,因为代码位于多行中。虽然我可以很好地看到变量的顺序,但是变量的顺序问题仍然是相关的。