在熊猫系列的k个元素组上应用函数

时间:2016-09-29 06:57:03

标签: python pandas group-by mean series

我有一只熊猫系列:

0     1
1     5
2    20
3    -1

让我们说我想在每两个元素上应用mean(),所以我得到这样的东西:

0    3.0
1    9.5

有优雅的方法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用index k=2除以k = 2 print (s.index // k) Int64Index([0, 0, 1, 1], dtype='int64') print (s.groupby([s.index // k]).mean()) name 0 3.0 1 9.5

 error: ‘struct tty_driver’ has no member named ‘write’
            ((my_tty->driver)->write) (my_tty,0,str,strlen(str));

答案 1 :(得分:1)

如果你在大型系列中多次使用它,你会想要考虑快速的方法。该解决方案使用所有numpy功能,并且速度很快。

使用reshape并构建新的pd.Series

考虑pd.Series s

s = pd.Series([1, 5, 20, -1])

广义函数

def mean_k(s, k):
    pad = (k - s.shape[0] % k) % k
    nan = np.repeat(np.nan, pad)
    val = np.concatenate([s.values, nan])
    return pd.Series(np.nanmean(val.reshape(-1, k), axis=1))

<强> 示范

mean_k(s, 2)

0    3.0
1    9.5
dtype: float64
mean_k(s, 3)

0    8.666667
1   -1.000000
dtype: float64

答案 2 :(得分:1)

你可以这样做:

(s.iloc[::2].values + s.iloc[1::2])/2

如果你想要你也可以在之后重置索引,所以你有0,1作为索引,使用:

((s.iloc[::2].values + s.iloc[1::2])/2).reset_index(drop=True)