回答編集履歴

1

追記

2021/08/17 08:11

投稿

bsdfan
bsdfan

スコア4794

test CHANGED
@@ -41,3 +41,43 @@
41
41
  df_group = df.groupby(['sya','kan']).apply(func).reset_index()
42
42
 
43
43
  ```
44
+
45
+
46
+
47
+ 下記のようにpandas.pivot_tableを使ってやる方が速いんじゃないかという気がします。
48
+
49
+ (実データで試さないとわからないです)
50
+
51
+ ```python
52
+
53
+ df2 = pd.pivot_table(df, 'kinngaku',
54
+
55
+ index=['sya', 'kan'], columns=['ksex', 'keiro'],
56
+
57
+ aggfunc='sum', fill_value=0)
58
+
59
+ df2.columns = df2.columns.map({
60
+
61
+ (0, 0): 'kinngaku_man_sin',
62
+
63
+ (0, 1): 'kinngaku_man_mina',
64
+
65
+ (1, 0): 'kinngaku_woman_sin',
66
+
67
+ (1, 1): 'kinngaku_woman_mina',
68
+
69
+ })
70
+
71
+ df2['kinngaku_man'] = df2['kinngaku_man_sin'] + df2['kinngaku_man_mina']
72
+
73
+ df2['kinngaku_woman'] = df2['kinngaku_woman_sin'] + df2['kinngaku_woman_mina']
74
+
75
+ df2['kinngaku'] = df2['kinngaku_man'] + df2['kinngaku_woman']
76
+
77
+ ```
78
+
79
+
80
+
81
+ 大きくグループ化して、applyの中で分割計算する処理をいれるか、
82
+
83
+ 小さくグループ化して、結果を足し合わせるかの違いです。