DataFrame中包含的系列的平均值

时间:2018-02-19 17:14:35

标签: python pandas dataframe mean series

以下DataFrame(df)有3列:EventCountsLength,其中Counts列包含一系列数字。我想估计每个Counts行的平均值,并将其显示在第四行。

df = 
Event                                                 Counts Length  
0     [111240.0, 110530.0, 108540.0, 108540.0, 10838...       5                                                      
7     [117240.0, 119160.0, 120160.0, 121950.0, 12195...       6
13    [180420.0, 180420.0, 183840.0, 183840.0, 18384...       6
16    [160260.0, 159430.0, 159430.0, 157720.0, 15955...      14

我测试了以下表达式但未成功。

 df['mean'] = df['counts'].mean(axis = 1) 

以及基于此行的其他变体。

如果我理解正确,问题是由于Count列包含多个元素。

感谢您帮助解决这个显而易见的问题。

2 个答案:

答案 0 :(得分:2)

你可以使用Numpy,假设它们的长度都相同

df['Mean'] = np.mean(df['Counts'].tolist(), axis=1)
df

   Event                                           Counts  Length      Mean
0      0  [111240.0, 110530.0, 108540.0, 108540.0, 10838]       5   89937.6
1      7  [117240.0, 119160.0, 120160.0, 121950.0, 12195]       6   98141.0
2     13  [180420.0, 180420.0, 183840.0, 183840.0, 18384]       6  149380.8
3     16  [160260.0, 159430.0, 159430.0, 157720.0, 15955]      14  130559.0

否则

df['Mean'] = df['Counts'].apply(np.mean)
df

   Event                                           Counts  Length      Mean
0      0  [111240.0, 110530.0, 108540.0, 108540.0, 10838]       5   89937.6
1      7  [117240.0, 119160.0, 120160.0, 121950.0, 12195]       6   98141.0
2     13  [180420.0, 180420.0, 183840.0, 183840.0, 18384]       6  149380.8
3     16  [160260.0, 159430.0, 159430.0, 157720.0, 15955]      14  130559.0

答案 1 :(得分:2)

这是一种利用numpy数组性能的方法:

import pandas as pd

df = pd.DataFrame([[[111240.0, 110530.0, 108540.0, 108540.0]],
                   [[117240.0, 119160.0, 120160.0, 121950.0]],
                   [[180420.0, 180420.0, 183840.0, 183840.0]],
                   [[160260.0, 159430.0, 159430.0, 157720.0]]], columns=['Counts'])

df['mean'] = np.mean(np.vstack(df['Counts'].values), axis=1)

#                                      Counts      mean
# 0  [111240.0, 110530.0, 108540.0, 108540.0]  109712.5
# 1  [117240.0, 119160.0, 120160.0, 121950.0]  119627.5
# 2  [180420.0, 180420.0, 183840.0, 183840.0]  182130.0
# 3  [160260.0, 159430.0, 159430.0, 157720.0]  159210.0