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

回答編集履歴

1

リストを使わない方法

2021/04/27 05:57

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -26,4 +26,46 @@
26
26
  ((df['転入時年齢'] >= 95)&(df['転入時年齢'] <= 99)).sum(),
27
27
  ((df['転入時年齢'] >= 100)).sum()] for df in df_list]
28
28
  ```
29
- 直接データフレームを作るのは、処理はたいしたことはないのですが、テストデータ作成に時間がかかるのでちょっと待ってください。
29
+ 直接データフレームを作るのは、処理はたいしたことはないのですが、テストデータ作成に時間がかかるのでちょっと待ってください。
30
+
31
+ こんな感じです。ちょっと勉強が必要ですが、読み解いてください。
32
+
33
+ ```python
34
+ >>> import pandas as pd
35
+ >>> df_list = [df_4,df_5,df_6,df_7,df_8,df_9,df_10,df_11,df_12,df_13]
36
+ >>> dummy_df = pd.DataFrame({'転入時年齢範囲':list(range(0,101,5)), 'count': [0]*21})
37
+ >>>
38
+ >>> result_list = []
39
+ >>> for i, df in enumerate(df_list):
40
+ ... temp_df1 = pd.DataFrame({'転入時年齢範囲':df['転入時年齢'].apply(lambda age: (age//5)*5 if age<100 else 100), 'count':[1]*len(df)})
41
+ ... temp_df2 = pd.concat([temp_df1, dummy_df]).groupby('転入時年齢範囲').sum()
42
+ ... temp_df2.columns = [f'df_{i+4}']
43
+ ... result_list.append(temp_df2)
44
+ ...
45
+ >>> result_df = pd.concat(result_list, axis=1)
46
+ >>> result_df.index = [f'{i}歳~{i+4}歳' for i in range(0,100,5)] + ['100歳以上']
47
+ >>>
48
+ >>> print(result_df)
49
+ df_4 df_5 df_6 df_7 df_8 df_9 df_10 df_11 df_12 df_13
50
+ 0歳~4歳 0 0 1 2 1 3 2 2 3 1
51
+ 5歳~9歳 3 3 7 3 2 2 2 6 0 3
52
+ 10歳~14歳 1 2 1 0 4 5 4 3 3 5
53
+ 15歳~19歳 2 2 3 1 0 1 4 5 2 6
54
+ 20歳~24歳 0 0 2 2 3 0 3 2 2 3
55
+ 25歳~29歳 1 1 3 2 3 1 1 3 2 6
56
+ 30歳~34歳 2 4 0 7 1 2 3 4 0 5
57
+ 35歳~39歳 1 1 0 0 5 2 2 3 1 2
58
+ 40歳~44歳 1 2 1 4 2 3 6 3 3 2
59
+ 45歳~49歳 1 2 3 1 0 1 4 9 3 0
60
+ 50歳~54歳 1 1 3 4 5 2 4 0 1 4
61
+ 55歳~59歳 0 2 1 1 6 2 7 3 0 3
62
+ 60歳~64歳 2 0 2 3 7 1 2 3 1 2
63
+ 65歳~69歳 2 1 2 2 1 0 2 5 2 4
64
+ 70歳~74歳 0 0 0 1 2 1 3 0 0 7
65
+ 75歳~79歳 1 3 4 1 1 1 2 3 2 2
66
+ 80歳~84歳 1 5 3 2 1 2 0 2 6 3
67
+ 85歳~89歳 4 2 4 1 0 1 1 1 3 3
68
+ 90歳~94歳 0 0 1 2 3 3 5 5 0 2
69
+ 95歳~99歳 1 1 4 2 0 0 2 5 1 4
70
+ 100歳以上 6 5 3 5 7 4 11 5 2 8
71
+ ```