如何在定义自己的函数时迭代列表中的条目

Posted

技术标签:

【中文标题】如何在定义自己的函数时迭代列表中的条目【英文标题】:how to iterate over entries in list while defining own function 【发布时间】:2021-01-16 04:01:27 【问题描述】:

我正在尝试定义具有这些目标的函数。

一个数据帧df 国家/地区列表(可以假设所有国家/地区都可以在 DataFrame 的location 列中找到) cl 一个字符串(可以假设是一个列(除了位置),它将在 DataFrame 中找到。column

该函数应返回给定国家列表的给定指标的平均值。通俗地说。我希望该功能能够将每个国家/地区的给定值拉回 column 所提到的值。然后sum列表中的所有条目除以len 如果这是一个列表

g7 = ['United States', 'Italy', 'Canada', 'Japan', 'United Kingdom', 'Germany', 'France']

这是我目前的代码:

def countries_average(df,cl,column):
    average = []
    for country in enumerate(cl):
        x = df.loc[df["location"] == country, column]
        average.append(x)
        y = sum(average)/len(average)
        return average

它会返回列表中第一个条目中的一行。当column 中的条目之一是total_deaths

[28543    127410.0
 Name: total_deaths, dtype: float64]

遍历此列表并成功添加到average 列表的任何帮助。 我试过range(len(cl)),但这也无济于事。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我认为这应该可行:

def countries_average(df,cl,column):
    return df[df['location'].isin(cl)][column].mean()

【讨论】:

这不返回任何东西,我所有的输出返回都是Series([], Name: total_deaths, dtype: float64) 如果你的 x 是一个数值,那么它应该可以工作。你能打印 x 吗? Series([], Name: total_deaths, dtype: float64) 更改 "x = df.loc[df["location"] == country, column]" 为 "x = df.loc[df["location"] == country, column][ 0]"(在末尾添加 [0])并告诉我你得到了什么。 我更新了代码,现在应该不会再给您带来任何问题了。

以上是关于如何在定义自己的函数时迭代列表中的条目的主要内容,如果未能解决你的问题,请参考以下文章

你如何在方案中实现一个简单的列表迭代器?

如何将我自己的链表中的迭代器定义为 Java 中的节点?

如何在使用 range() 函数从列表中删除项目时迭代列表? [复制]

在map中怎么删除一个对象

如何基于循环迭代器选择函数

定义我自己的返回列表的范围函数