首页 > 解决方案 > 迭代多个数据帧并执行数学函数保存输出

问题描述

我有几个数据框,我在其上执行相同的功能 - 为特定列(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 循环函数,它将我的中值输出作为列表中每个数据帧的系列分别生成,然后我可以为均值等执行此操作。

非常感谢您的帮助!

标签: pythonloopsvariablesfor-loopdataframe

解决方案


首先,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')

推荐阅读