回答編集履歴
1
追加質問の回答
answer
CHANGED
@@ -2,4 +2,23 @@
|
|
2
2
|
|
3
3
|
```Python
|
4
4
|
df['z'] = df.groupby(df.index//3)['y'].transform('mean')
|
5
|
+
```
|
6
|
+
|
7
|
+
---
|
8
|
+
**追記**
|
9
|
+
|
10
|
+
> 20個あるデータに対して前半10個と後半10個に分け、
|
11
|
+
|
12
|
+
普通にやるとしたら、データの前半と後半を2回に分けて(ループで)上記の処理を行い、その結果を結合して 'z'列を追加するのでしょうかね
|
13
|
+
ただ、そのまま ``index//3``の値でグループ化をしてしまうと、後半部のグループの区切りがおかしくなるので単純に 0から9 までの値を3で割った値(整数部のみ)でグループ化しております。
|
14
|
+
```
|
15
|
+
d = []
|
16
|
+
for i in [0,10]:
|
17
|
+
d.append(df[i:i+10].groupby(np.arange(10)//3)['y'].transform('mean'))
|
18
|
+
df['z'] = pd.concat(d)
|
19
|
+
```
|
20
|
+
groupbyを二重にするとワンライナーで書くこともできますが可読性はわるそうです
|
21
|
+
|
22
|
+
```Python
|
23
|
+
df['z'] = df.groupby(df.index//10, group_keys=False).apply(lambda d: d.groupby(np.arange(10)//3)['y'].transform('mean'))
|
5
24
|
```
|