我正在尝试编写一个函数来计算存储在列表中的不同数据帧的相同列的平均值:
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)
但是,我只得到了第一列的平均值!
答案 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