python中mean的用法_python – 将sum()或mean()分配给函数内的df.groupby

我怀疑这是Python中的一个非常基本的功能,我已经查看了可能已经有答案的问题下的建议,但我不认为这是一个重复的问题.我会删除它,如果是的话.

挑战:

我想在函数中包装df.groupby(pd.TimeGrouper(freq =’M’)).sum(),以便我可以将sum(),mean()或count()指定为该函数中的参数.我在here之前问了一个类似的问题,但我认为在这种特殊情况下我不能使用相同的技术.

这是一个可重复输入的片段:

# Imports

import pandas as pd

import numpy as np

# Dataframe with 1 or zero

# 100 rows and 4 columns

# Indexed by dates

np.random.seed(12345678)

df = pd.DataFrame(np.random.randint(0,2,size=(100, 4)), columns=list('ABCD'))

datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=100).tolist()

df['dates'] = datelist

df = df.set_index(['dates'])

df.index = pd.to_datetime(df.index)

print(df.head(10))

这使:

kEbbG.png

有了这个,我们可以做到:

df2 = df.groupby(pd.TimeGrouper(freq='M')).sum()

print(df2)

得到:

wutg8.png

或者我们可以这样做:

df3 = df.groupby(pd.TimeGrouper(freq='M')).mean()

print(df3)

得到:

vVvGC.png

这是包含在函数中的过程的一部分:

# My function

def function1(df):

df = df.groupby(pd.TimeGrouper(freq='M')).sum()

return df

# Function1 call

df4 = function1(df = df)

print(df4)

这很好用:

Zkkmz.png

当我尝试在函数2中添加sum()或mean()作为参数时,会出现问题,如下所示:

# My function with sum() as an argument

def function2(df, fun):

df = df.groupby(pd.TimeGrouper(freq='M')).fun

return df

我的第一次尝试引发了一个TypeError:

# Function2 test 1

df5 = function2(df = df, fun = sum())

YFomP.png

我的第二次尝试引发了属性错误:

# Function2 test 2

df6 = function2(df = df, fun = 'sum()')

vAOpb.png

是否可以对此设置进行一些调整以使其正常工作? (我尝试用’M’作为freq的参数的另一个版本,并且工作得很好).或者这不是这些事情的完成方式?

谢谢你的任何建议!

这是一个简单的复制和粘贴的整个混乱:

#%%

# Imports

import pandas as pd

import numpy as np

# Dataframe with 1 or zero

# 100 rows across 4 columns

# Indexed by dates

np.random.seed(12345678)

df = pd.DataFrame(np.random.randint(0,2,size=(100, 4)), columns=list('ABCD'))

datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=100).tolist()

df['dates'] = datelist

df = df.set_index(['dates'])

df.index = pd.to_datetime(df.index)

print(df.head(10))

# Calculate sum per month

df2 = df.groupby(pd.TimeGrouper(freq='M')).sum()

print(df2)

# Or calculate average per month

df3 = df.groupby(pd.TimeGrouper(freq='M')).mean()

print(df3)

# My function

def function1(df):

df = df.groupby(pd.TimeGrouper(freq='M')).sum()

return df

# Function1 test

df4 = function1(df = df)

print(df4)

# So far so good

#%%

# My function with sum() as argument

def function2(df, fun):

print(fun)

df = df.groupby(pd.TimeGrouper(freq='M')).fun

return df

# Function2 test 1

# df5 = function2(df = df, fun = sum())

# Function2 test 2

# df6 = function2(df = df, fun = 'sum()')

# Function2 test 3

# df7 = function2(df = df, fun = sum)

解决方法:

你需要使用申请

def function2(df, fun):

return df.groupby(pd.TimeGrouper(freq='M')).apply(fun)

只需确保fun是一个可调用的pd.DataFrame

但是,你应该使用agg.如果fun将列减少到类似于sum或mean的标量,那么这应该有效.需要考虑的事情.

df.groupby(pd.TimeGrouper('M')).agg(['sum', 'mean', fun])

标签:python,function,pandas

来源: https://codeday.me/bug/20190527/1163532.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值