python3.9でpandasでクロス集計がしたく、
pandas.crosstab(DataFrame['age'],DataFrame['sex']) で次の通り出力したいのですが
age | M | F |
---|---|---|
0-9 | 3 | 4 |
10-19 | 2 | 2 |
20-29 | 0 | 0 |
30-39 | 4 | 8 |
実際にはデータに年齢20-29歳が存在しない場合出力することができません。
age | M | F |
---|---|---|
0-9 | 3 | 4 |
10-19 | 2 | 2 |
30-39 | 4 | 8 |
crosstabにこだわっているわけではありません。
0代から60歳以上で固定した出力フォーマットで集計したいのですが
データがない場合にも出力する方法はないでしょうか。
numpy.nanでダミーデータを追加した場合でもうまくいきませんでした。
2022/03/25追記
ご指摘あったとおり具体的なコードもなくデータがカテゴリーか数かも不明で質問が不明瞭で申し訳ないことです。
さしあたりmelianさんが想定してくれた内容とコードで解決できました。(groupby,cut,binなどの使用)
また、後学のため教えていただきたいのですが
crosstab() で dropna=False については下記のコードではageの'10-19'が表示できませんでした。どこがまちがっているでしょうか。
import pandas as pd import numpy as np df=pd.DataFrame({'age':['0-9','20-29','0-9','30-39'],'sex':[1,2,2,1]}) df_dummy=pd.DataFrame({'age':['0-9','10-19','20-29','30-39'],'sex':[np.nan for i in range(4)]}) df2=df.append(df_dummy) b=pd.crosstab(df2['age'],df2['sex'],dropna=False) print(b)

回答1件
あなたの回答
tips
プレビュー