パンダでのピボットデータフレーム?

マーティン:
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          -

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28054&siteId=1