计算几个数据帧的相同列的平均值

时间:2017-08-17 18:32:28

标签: list pandas dataframe

我正在尝试编写一个函数来计算存储在列表中的不同数据帧的相同列的平均值:

def mean(dfs):

     # declare an empty dataframe
     df_mean = pd.DataFrame()
     # assign the first column from each raw data framework to df
     for i in range(len(dfs)): 
          dfs[i].set_index(['Time'], inplace=True)

    for j in dfs[0].columns:
         for i in range(len(dfs)):
             df_mean[j] = pd.concat([df_mean,dfs[i][j]], axis=1).mean(axis=1)
    return df_mean

dfs = []
l1 = [[1,6,2,6,7],[2,3,2,6,8],[3,3,2,8,8],[4,5,2,6,8],[5,3,9,6,8]]
l2 = [[1,7,2,5,7],[2,3,0,6,8],[3,3,3,6,8],[4,3,7,6,8],[5,3,0,6,8]]

dfs.append(pd.DataFrame(l1, columns=['Time','25','50','75','100']))
dfs.append(pd.DataFrame(l2, columns=['Time','25','50','75','100']))

mean(dfs)

但是,我只得到了第一列的平均值!

2 个答案:

答案 0 :(得分:2)

选项1
使用python的sum,默认情况下根据单个对象的__add__方法减少列表。然后除以列表的长度。

sum(dfs) / len(dfs)

   Time   25   50   75  100
0   1.0  6.5  2.0  5.5  7.0
1   2.0  3.0  1.0  6.0  8.0
2   3.0  3.0  2.5  7.0  8.0
3   4.0  4.0  4.5  6.0  8.0
4   5.0  3.0  4.5  6.0  8.0

选项2
使用numpy的{​​{1}}函数

重建
mean

答案 1 :(得分:1)

submit索引的数据框列表上使用$('#add-form-button').on('click', function() { // AJAX returns response $('#form-container').html(response); setTimeout(function(){ $('#my-form').on('submit', function(event) { event.preventDefault(); )}; } ,400); }); ,在concat上使用Time更大的数据框并使用groupby

Time

或者,因为mean列无论如何都是常见的,至少在这个用例中

In [275]: pd.concat([d.set_index('Time') for d in dfs]).groupby(level='Time').mean()
Out[275]:
       25   50   75  100
Time
1     6.5  2.0  5.5  7.0
2     3.0  1.0  6.0  8.0
3     3.0  2.5  7.0  8.0
4     4.0  4.5  6.0  8.0
5     3.0  4.5  6.0  8.0

详细

Time