Python, Pandas: 平均每 2 行在一起
Python, Pandas: average every 2 rows together
非常基本的问题,但想知道:
在 pandas Dataframe 中对每 2 行进行平均的 'proper' 方法是什么,因此最终只有一半的行数?
请注意,这与 rolling_mean 不同,因为它减少了条目数。
一个快速的方法:
>>> s = pd.Series(range(10))
>>> s
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
>>> ((s + s.shift(-1)) / 2)[::2]
0 0.5
2 2.5
4 4.5
6 6.5
8 8.5
我猜 "proper way" 应该是这样的:
>> a = s.index.values
>>> idx = np.array([a, a]).T.flatten()[:len(a)]
>>> idx
[0 0 1 1 2 2 3 3 4 4]
>>> s.groupby(idx).mean()
0 0.5
2 2.5
4 4.5
6 6.5
8 8.5
但它会慢 2 倍左右,并且随着大小的增加而变得更糟。
非常基本的问题,但想知道:
在 pandas Dataframe 中对每 2 行进行平均的 'proper' 方法是什么,因此最终只有一半的行数?
请注意,这与 rolling_mean 不同,因为它减少了条目数。
一个快速的方法:
>>> s = pd.Series(range(10))
>>> s
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
>>> ((s + s.shift(-1)) / 2)[::2]
0 0.5
2 2.5
4 4.5
6 6.5
8 8.5
我猜 "proper way" 应该是这样的:
>> a = s.index.values
>>> idx = np.array([a, a]).T.flatten()[:len(a)]
>>> idx
[0 0 1 1 2 2 3 3 4 4]
>>> s.groupby(idx).mean()
0 0.5
2 2.5
4 4.5
6 6.5
8 8.5
但它会慢 2 倍左右,并且随着大小的增加而变得更糟。