このデータフレームを再編成するのに苦労しています。pd.pivot_table
またはを使用することになっていると思いますpd.crosstab
が、仕事を成し遂げる方法がわかりません。
ここに私のデータフレームがあります:
vicro = pd.read_csv(vicroURL)
vicro_subset = vicro.ix[:,['P1', 'P10', 'P30', 'P71', 'P82', 'P90']]
In [6]: vicro
vicro vicroURL vicro_subset
In [6]: vicro_subset.head()
Out[6]:
P1 P10 P30 P71 P82 P90
0 - I - - - M
1 - I - V T M
2 - I - V A M
3 - I - T - M
4 - - - - A -
私がすべきことは、このデータ フレームで可能なすべての値を取得し、それらを行にすることです。新しい値はカウントになります。次のようになります。
Out[6]:
P1 P10 P30 P71 P82 P90
I 0 4 0 0 0 0
V 0 0 0 2 0 0
A 0 0 0 0 2 0
M 0 0 0 0 0 4
T 0 0 0 1 1 0
どんな助けでも大歓迎です!ありがとうございました。
編集:メルトを使用して回答を詳しく説明すると、どちらもパンダをもう少し理解するのに役立ちましたが、「メルト」回答には未知数がありました:
In [8]: melted_df = pd.melt(vicro_subset)
In [9]: melted_df.head()
Out[9]:
variable value
0 P1 -
1 P1 -
2 P1 -
3 P1 -
4 P1 -
In [13]: grouped_melt = melted_df.groupby(['variable','value'])['value'].count()
In [14]: grouped_melt.head()
Out[14]:
variable value
P1 - 797
. 269
P10 - 339
. 1
F 132
In [15]: unstacked_group = grouped_melt.unstack()
In [16]: unstacked_group.head()
Out[16]:
<class 'pandas.core.frame.DataFrame'>
Index: 5 entries, P1 to P82
Data columns:
- 5 non-null values
. 2 non-null values
A 1 non-null values
AITV 1 non-null values
AT 2 non-null values
In [17]: transpose_unstack = unstacked_group.T
In [18]: transpose_unstack.head()
Out[18]:
variable P1 P10 P30 P71 P82 P90
value
- 797 339 1005 452 604 634
. 269 1 NaN NaN NaN NaN
A NaN NaN NaN NaN 282 NaN
AITV NaN NaN NaN NaN 1 NaN
AT NaN NaN NaN 1 2 NaN