2017-01-24 6 views
0

なるように、私はユーザを表し、各行とパンダのデータフレーム、および彼らが買ったことが、各列の項目を有しています。再構築パンダのデータフレームの各行は、ユーザーアイテムとの対話

df = pd.DataFrame({'Item A':[0,0,1], 'Item B':[1,1,2], 'Item C':[0,1,2]}) 
df 

    | Item A | Item B | Item C 
----------------------------- 
0 | 0 | 1 | 0 
1 | 0 | 1 | 1 
2 | 1 | 2 | 2 

私は、これは私は、各ユーザー項目の相互作用のための別々の行を持って再編成したい:セルの値は、アイテムが購入された回数です。私が欲しいのはこれです:

User | Item | Bought 
---------------------------- 
    0 | Item A | 0 
    0 | Item B | 1 
    0 | Item C | 0 
    1 | Item A | 0 
    1 | Item B | 1 
    1 | Item C | 1 
    2 | Item A | 1 
    2 | Item B | 2 
    2 | Item C | 2 

これを行うにはどうすればよいでしょうか? (溶融物を使用して私がここで探しているものを正確に与えることはありません。)ありがとう!

答えて

2

単にmeltデータフレームが、最初のインデックス値からユーザーを作成します。

df = pd.DataFrame({'Item A':[0,0,1], 'Item B':[1,1,2], 'Item C':[0,1,2]}) 
df['User'] = df.index 

dfm = pd.melt(df, id_vars='User', var_name='Item', value_name='Bought').\ 
     sort_values('User').reset_index(drop=True) 

# User Item Bought 
# 0  0 Item A  0 
# 1  0 Item B  1 
# 2  0 Item C  0 
# 3  1 Item A  0 
# 4  1 Item B  1 
# 5  1 Item C  1 
# 6  2 Item A  1 
# 7  2 Item B  2 
# 8  2 Item C  2 
関連する問題