迭代多个数据帧并执行数学函数保存输出

Posted

技术标签:

【中文标题】迭代多个数据帧并执行数学函数保存输出【英文标题】:Iterate over multiple dataframes and perform maths functions save output 【发布时间】:2018-11-04 22:20:55 【问题描述】:

我有几个数据帧,我在这些数据帧上执行相同的功能 - 为特定列(PurchasePrice)提取平均值、几何平均值、中位数等,由另一列(GORegion)中的组组织。目前我只是为每个数据帧分别执行此操作,因为我无法弄清楚如何在 for 循环中执行此操作并为每个数据帧上执行的每个函数保存单独的数据系列。

即我这样执行中位数:

regmedian15 = pd.Series(nw15.groupby(["GORegion"])['PurchasePrice'].median(), name = "regmedian_nw15")

我想为 [nw15, nw16, nw17] 的数据框列表执行此操作,为每个数据框提取相同的变量输出。

我尝试过类似的方法:

listofnwdfs = [nw15, nw16, nw17]

for df in listofcmldfs:
       df+'regmedian' = pd.Series(df.groupby(["GORegion"])
       ['PurchasePrice'].median(), name = df+'regmedian')

但它说“不能分配给操作员”

我认为重点是我不知道如何使用我输入到 for 循环中的数据帧的名称来创建单独的输出变量名称。我只想要一个 for 循环函数,它分别为列表中的每个数据帧生成我的中值输出作为系列,然后我可以为均值等执行此操作。

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

首先,df+'regmedian' = ... 不是有效的 Python 语法。您正在尝试为 A + B 形式的表达式赋值,这就是 Python 抱怨您试图重新定义 + 的含义的原因。

另外,df+'regmedian' 本身看起来很奇怪。您正在尝试添加一个 DataFrame 和一个字符串。

跟踪不同数据场的不同统计信息的一种方法是使用字典。例如,您可以替换

listofnwdfs = [nw15, nw16, nw17]

dict_of_nwd_frames = 15: nw15, 16: nw16, 17: nw17

假设您要为每一帧存储'regmedian' 数据。您也可以使用 dicts 来做到这一点。

data = dict()
for key, df in dict_of_nwd_frames.items():
        data[(i, 'regmedian')] =  pd.Series(df.groupby(["GORegion"])['PurchasePrice'].median(), name = str(key) + 'regmedian')

【讨论】:

啊,是的,我需要更改为第三行的键,但效果很好,非常感谢您的帮助!我将输出存储在数据框中,而不是工作正常:)

以上是关于迭代多个数据帧并执行数学函数保存输出的主要内容,如果未能解决你的问题,请参考以下文章

编写迭代函数来计算数学序列

数学的艺术——迭代函数下的图案(Java绘图)

4 - 函数&装饰器 and 迭代器&生成器

高阶函数柯里化及装饰器的使用

迭代是啥意思?

循环遍历不同的数据帧并使用函数执行操作