我需要对数据进行大量汇总,希望能够编写一个允许我通过的函数
1)用于分组的字符串2)将构成分子/分母/和公式的字段
由于我将使用不同的分组以及不同的分子和分母对数据进行大量削减,因此对我而言,创建通用组并将其传递给我所需的组将变得更加容易
因此,让我们看下面的例子:
import pandas as pd
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
(df.groupby(['sex', 'smoker'])[['total_bill','tip']].sum().apply(lambda r: r.tip/r.total_bill, axis = 1))
现在,我想创建一个函数,该函数允许我按值和分子分母字段传递组
因此,例如
groupbyvalue=['sex', 'smoker']
fieldstoaggregate=['tip','total_bill']
并将它们插入类似
(df.groupby(groupbyvalue)[fieldstoaggregate].sum().apply(lambda r: r.tip/r.total_bill, axis = 1))
效果很好,但是当我尝试将公式替换为以下内容时:
dfformula="r.tip/r.total_bill"
然后将其放在公式中,如下所示
(df.groupby(groupbyvalue)[fieldstoaggregate].sum().apply(lambda r: dfformula, axis = 1)*10000)
我的输出如下所示:
sex smoker
Female No r.tip/r.total_billr.tip/r.total_billr.tip/r.to...
Yes r.tip/r.total_billr.tip/r.total_billr.tip/r.to...
Male No r.tip/r.total_billr.tip/r.total_billr.tip/r.to...
Yes r.tip/r.total_billr.tip/r.total_billr.tip/r.to...
dtype: object
有什么方法可以动态创建计算,然后在公式中使用它,而不是将其解释为字符串吗?
谢谢
您可以使用eval()
功能来实现
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',')
groupbyvalue = ['sex', 'smoker']
fieldstoaggregate = ['tip','total_bill']
dfformula = "r.tip/r.total_bill"
(df.groupby(groupbyvalue)[fieldstoaggregate].sum().apply(lambda r: eval(dfformula), axis = 1))
输出如下
sex smoker
Female No 0.153189
Yes 0.163062
Male No 0.157312
Yes 0.136919
dtype: float64
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句