回答編集履歴
3
Update
answer
CHANGED
@@ -1,36 +1,20 @@
|
|
1
|
+
> crosstab() で dropna=False については下記のコードではageの'10-19'が表示できませんでした。どこがまちがっているでしょうか。
|
2
|
+
|
1
|
-
`
|
3
|
+
`df['age']` を `pd.core.dtypes.dtypes.CategoricalDtype` 型にキャストする必要があります。
|
2
4
|
```python
|
3
5
|
import pandas as pd
|
6
|
+
import numpy as np
|
4
7
|
|
5
|
-
df = pd.DataFrame({
|
6
|
-
'name': [chr(i) for i in range(65, 88)],
|
7
|
-
'age': [*range(7), *range(10, 14), *range(30, 40), 30, 31],
|
8
|
-
|
8
|
+
df=pd.DataFrame({'age':['0-9','20-29','0-9','30-39'],'sex':[1,2,2,1]})
|
9
|
+
category = pd.api.types.CategoricalDtype(['0-9','10-19','20-29','30-39'])
|
10
|
+
b=pd.crosstab(df['age'].astype(category),df['sex'],dropna=False)
|
11
|
+
print(b)
|
9
12
|
|
10
|
-
})
|
11
|
-
|
12
13
|
#
|
13
|
-
count = (
|
14
|
-
df.groupby([pd.cut(df['age'], bins=[0, 10, 20, 30, 40], right=False,
|
15
|
-
labels=['0-9', '10-19', '20-29', '30-39']), 'sex'])
|
16
|
-
.size().unstack()[['M', 'F']])
|
17
|
-
|
18
|
-
#
|
19
|
-
sex
|
14
|
+
sex 1 2
|
20
15
|
age
|
21
|
-
0-9
|
16
|
+
0-9 1 1
|
22
|
-
10-19
|
17
|
+
10-19 0 0
|
23
|
-
20-29 0
|
18
|
+
20-29 0 1
|
24
|
-
30-39
|
19
|
+
30-39 1 0
|
25
20
|
```
|
26
|
-
|
27
|
-
**追記**
|
28
|
-
> crosstab() で dropna=False については下記のコードではageの'10-19'が表示できませんでした。どこがまちがっているでしょうか。
|
29
|
-
|
30
|
-
`df2['age']` を `pd.core.dtypes.dtypes.CategoricalDtype` 型にキャストする必要があります。
|
31
|
-
|
32
|
-
```python
|
33
|
-
df2['age'] = df2['age'].astype('category')
|
34
|
-
b=pd.crosstab(df2['age'],df2['sex'],dropna=False)
|
35
|
-
print(b)
|
36
|
-
```
|
2
Update
answer
CHANGED
@@ -22,4 +22,15 @@
|
|
22
22
|
10-19 2 2
|
23
23
|
20-29 0 0
|
24
24
|
30-39 4 8
|
25
|
-
```
|
25
|
+
```
|
26
|
+
|
27
|
+
**追記**
|
28
|
+
> crosstab() で dropna=False については下記のコードではageの'10-19'が表示できませんでした。どこがまちがっているでしょうか。
|
29
|
+
|
30
|
+
`df2['age']` を `pd.core.dtypes.dtypes.CategoricalDtype` 型にキャストする必要があります。
|
31
|
+
|
32
|
+
```python
|
33
|
+
df2['age'] = df2['age'].astype('category')
|
34
|
+
b=pd.crosstab(df2['age'],df2['sex'],dropna=False)
|
35
|
+
print(b)
|
36
|
+
```
|
1
Update
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
`groupby` で代用してみました。
|
1
|
+
`groupby` で代用してみました。
|
2
2
|
```python
|
3
3
|
import pandas as pd
|
4
4
|
|
@@ -11,15 +11,15 @@
|
|
11
11
|
|
12
12
|
#
|
13
13
|
count = (
|
14
|
-
df.groupby([pd.cut(df['age'], bins=[0, 10, 20, 30, 40], right=False
|
14
|
+
df.groupby([pd.cut(df['age'], bins=[0, 10, 20, 30, 40], right=False,
|
15
|
+
labels=['0-9', '10-19', '20-29', '30-39']), 'sex'])
|
15
|
-
.
|
16
|
+
.size().unstack()[['M', 'F']])
|
16
|
-
print(count)
|
17
17
|
|
18
18
|
#
|
19
|
-
sex
|
19
|
+
sex M F
|
20
|
-
age
|
20
|
+
age
|
21
|
-
|
21
|
+
0-9 3 4
|
22
|
-
|
22
|
+
10-19 2 2
|
23
|
-
|
23
|
+
20-29 0 0
|
24
|
-
|
24
|
+
30-39 4 8
|
25
25
|
```
|