numpyデータセットのいくつかの列を、カテゴリデータを含む別の列のセットと比較しようとしています。
Gender | Grade | Score 1 | Score 2 | Score 3
M | A | 12 | 8 | 0
M | A | 8 | 11 | 4
M | B | 10 | 8 | 9
F | B | 12 | 2 | 2
F | B | 11 | 8 | 1
F | B | 1 | 4 | 2
私がする必要があるのは、各スコア列を性別とグレードと比較することです。次に、各カテゴリの平均スコアを計算します。したがって、たとえば、性別Mと性別Fの平均、グレードAの平均とグレードBの平均を持つスコア1の値の平均。コードでカテゴリ(または性別とグレードの列名)を実際の値として明示的に定義することはできません。データセットには、カテゴリ値の変数分布があり、カテゴリデータを含む追加の列がいくつかあります。np.unique()
完全なリストを提供するすべてのカテゴリ値を計算できます。ただし、ufuncs、ブロードキャスト、マスキングなどを使用してマトリックスを作成し、これらの各列をループのないカテゴリ値と比較できるようにする方法については、行き詰まっています。
出力は、理想的には、1つの列で使用可能なすべてのカテゴリと、他の列からの関連する平均を含む行列である必要があります。
A B M F
Score1 mean(S1,A) mean(S1,B) mean(S1, M) mean(S1, F)
Score2 mean(S2,A) etc etc etc
Score3 mean(S3,A) etc etc etc
ピボットと連結ie
one = df.pivot_table(columns=['Gender'],aggfunc='mean')
two = df.pivot_table(columns=['Grade'],aggfunc='mean')
main = pd.concat([one,two],1)
F M A B
Score 1 8.000000 10.000000 10.0 8.5
Score 2 4.666667 9.000000 9.5 5.5
Score 3 1.666667 4.333333 2.0 3.5
1行のソリューションが必要な場合は、次のようにします。
main = pd.concat([df.pivot_table(columns=i) for i in ['Grade','Gender']],1) # By default `aggfunc` is mean
スコアのみをインデックスにし、残りを列にしたい場合は、次のようにします。
cols = df.columns[~df.columns.str.contains('Score')]
# Index(['Gender', 'Grade'], dtype='object')
ndf = pd.concat([df.pivot_table(columns=i) for i in cols],1)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加