【问题标题】:Loops in Dataframe数据框中的循环
【发布时间】:2020-09-11 16:36:12
【问题描述】:

我有 4 列:国家、年份、GDP 年增长率和字段大小(以 MM Barrels 为单位)。

  • 我正在寻找一种方法来创建一个循环函数,该函数生成一个油田发现后 5 年内的平均 GDP 增长值(“油田大小 MM 桶”)。示例:1961 年在阿尔及利亚发现,其规模为 2462。接下来的 5 年(1962-1967)的平均 GDP 年增长率是多少?
  • NaN 是指在这种情况下没有发现的年份。我希望循环每次在字段大小旁边的列中添加平均值。知道该怎么做吗?
Country,Year,GDP Annual Growth,Field_Size_MM_Barrels 
Algeria,1961,-13.605441,2462.0
Algeria,1962,-19.685042,2413.0
Algeria,1963,34.313729,NaN
Algeria,1964,5.839413,NaN
Algeria,1965,6.206898,500.0
Yemen,2016,-13.621458,NaN
Yemen,2017,-5.942320,NaN
Yemen,2018,-2.701475,NaN
Divided Neutral Zone: Kuwait/Saudi Arabia,1963,NaN,832.0
Divided Neutral Zone: Kuwait/Saudi Arabia,1967,NaN,1566.0

# read in with
df = pd.read_clipboard(sep=',')

【问题讨论】:

  • 您好,您可以创建一个文本表来演示您的数据框的外观,以及您已经尝试执行此操作的任何代码,或者任何让我们开始的东西,而不是插入图像?
  • 另外,这是一个重复的问题。见pandas get column average/mean

标签: pandas function dataframe for-loop while-loop


【解决方案1】:

如果您可以包含数据框的样本(例如前 20 行),那么它将有助于回答/测试答案。这是一个可能的起点:

# create a list for average GDP values
average = []
# go over all rows in df.values
for row_id in range(1, len(self.df.values)):
   test = self.df.iloc[row_id]["Field Size MM Barrels"]

   if (test == 'NaN'):
      row_list = []
      # create a row list to average over:
      for i in range(1+row_id,6+row_id):
           row_list.append(i)
      average = df[["GDP"]].iloc[row_list].mean(axis=0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 2017-01-07
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多