teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/08/17 08:11

投稿

bsdfan
bsdfan

スコア4921

answer CHANGED
@@ -19,4 +19,24 @@
19
19
  })
20
20
 
21
21
  df_group = df.groupby(['sya','kan']).apply(func).reset_index()
22
- ```
22
+ ```
23
+
24
+ 下記のようにpandas.pivot_tableを使ってやる方が速いんじゃないかという気がします。
25
+ (実データで試さないとわからないです)
26
+ ```python
27
+ df2 = pd.pivot_table(df, 'kinngaku',
28
+ index=['sya', 'kan'], columns=['ksex', 'keiro'],
29
+ aggfunc='sum', fill_value=0)
30
+ df2.columns = df2.columns.map({
31
+ (0, 0): 'kinngaku_man_sin',
32
+ (0, 1): 'kinngaku_man_mina',
33
+ (1, 0): 'kinngaku_woman_sin',
34
+ (1, 1): 'kinngaku_woman_mina',
35
+ })
36
+ df2['kinngaku_man'] = df2['kinngaku_man_sin'] + df2['kinngaku_man_mina']
37
+ df2['kinngaku_woman'] = df2['kinngaku_woman_sin'] + df2['kinngaku_woman_mina']
38
+ df2['kinngaku'] = df2['kinngaku_man'] + df2['kinngaku_woman']
39
+ ```
40
+
41
+ 大きくグループ化して、applyの中で分割計算する処理をいれるか、
42
+ 小さくグループ化して、結果を足し合わせるかの違いです。