微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 计算pandas中列中第n个元素的平均值

我有以下数据帧:

             df1
index   year   week   a     b     c
 -10    2017    10   45    26    19
  -9    2017    11   37    23    14
  -8    2017    12   21    66    19
  -7    2017    13   47    36    92
  -6    2017    14   82    65    18
  -5    2017    15   68    68    19
  -4    2017    16   30    95    24
  -3    2017    17   21    15    94
  -2    2017    18   67    30    16
  -1    2017    19   10    13    13
   0    2017    20   26    22    18
   1    2017    21   NaN   NaN   NaN
   2    2017    22   NaN   NaN   NaN
   3    2017    23   NaN   NaN   NaN
   4    2017    24   NaN   NaN   NaN
   ...
   53   2018    20   NaN   NaN   NaN

我需要为每个空单元格计算列中前一个第n个值的平均值,并将此值写入单元格. n等于零和向上的索引数.例如,对于列a中的第一个空单元格,我必须计算索引0和-10之间的平均值.然后是1和-9之间的一个单元格,依此类推.列a,b和c也是如此.并且计算总是从index = 1开始.

问题是a,b,c等列数可能不同.但我知道这些列将始终在列周之后.是否可以将这些计算应用于无限数量的列,但是如果已知这些列将位于列周之后?

我努力寻找任何东西,但我找不到合适的东西.

UPD:如果这有帮助,index = 0和down的最大行数将为53.

解决方法:

你可以通过玩熊猫和numpy来做一些这样的事情.假设你知道周列的索引是什么(即使你没有,一个简单的搜索会得到你的索引),例如,周列是第3,你可以做类似的事情

import numpy as np
import pandas as pd
#data is your dataframe name
column_list = list(data.columns.values)[3:]
for column_name in column_list :
    column = data[column_name].values
    #converted pandas series to numpy series
    for index in xrange(0,column.shape[0]):
        #iterating over entries in the column
        if np.isnan(column[index]):
            column[index] = np.nanmean(column.take(range(index-10,index+1),mode='wrap'))

这是一个糟糕的未实现的解决方案,但应该工作正常.它将用前面的10个条目替换所有NaN条目.如果您只想要前面的10而没有环绕,那么您只需要将第一个n取为小于10的n,就像
new_df [index] = np.nanmean(new_df [max(0,index-10):index 1])

希望这可以帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐