マーティン:
people1 trait1 YES
people1 trait2 YES
people1 trait3 NO
people1 trait4 RED
people2 trait1 NO
people2 trait2 YES
people2 trait4 BLACK
等..
これは、そのテーブルからこのようなものを作成することが可能ですか?
trait1, trait2, trait3, trait4 ...
people1 YES YES NO RED
people2 NO YES - BLACK
people3 - - YES BLUE
ファイルは、Excelで、私はパンダにしようとしたことをやるにはあまりにも大きいですが、私はこのケースで助けを見つけることができません。私はpd.pivot_table funcionを見つけましたが、私は働いてコードをビルドすることはできません。私は様々なerors(99%私のせい)を試してみましたました。
誰かがどのように私の場合、それを使用するように私に説明できますか?それともpandas.pivotより良いオプションです?+
EDIT
I rebuild my frame:
1 'interpretation' 'trait'
p1 YES t1
p1 BLACK t2
p1 NO t3
p2 NO t1
p2 RED t2
p2 NO t3
そして、私は提案を使用します。
data1.pivot_table(インデックス= 1、列= "名前"、値= '形質'、aggfunc = ' '参加、fill_value =' - ')。
そして、私が得ました:
TypeError: sequence item 0: expected str instance, float found
I変更した場合
data1.pivot_table(インデックス= 1、列= "形質"、値= '値'、aggfunc = ' ' fill_valueを=参加。' - ')。
私が悪い順番テーブルを得たが、エラーなし:
p1 p2 p3 p4
YES trait1 t1
YES t1 t2 etc.
NO
RED
No
...
私が思うので、最初のオプションは正しいですが、私はそのエラーを修復傾けます。それはすべてのcolsのために(O)を返しdfを私は、DTYPEとき。
エズレル:
私はこの問題は、列の値が欠落していると思うtrait
ので、join
関数が失敗しました。だから、可能な解決策は、空の文字列に欠損値を置き換えます:
print (data1)
1 name trait
0 p1 YES NaN <- missing value
1 p1 BLACK t2
2 p1 NO t3
3 p2 NO t1
4 p2 RED t2
5 p2 NO t3
data1['trait'] = data1['trait'].fillna('')
df = data1.pivot_table(index=1,
columns="name",
values='trait',
aggfunc=','.join,
fill_value='-')
print (df)
1 p1 p2
name
BLACK t2 -
NO t3 t1,t3
RED - t2
YES -
また、列にしたいの変換インデックスの場合:
data1['trait'] = data1['trait'].fillna('')
df = (data1.pivot_table(index=1,
columns="name",
values='trait',
aggfunc=','.join,
fill_value='-')
.reset_index()
.rename_axis(None, axis=1))
print (df)
name p1 p2
0 BLACK t2 -
1 NO t3 t1,t3
2 RED - t2
3 YES -