2017-04-26 10 views
1

私はこのようになりますデータはパンダのデータフレームである機械学習のためのデータを用意しています挿入値は

# we know how many values there are but 
# length can be changed into length of [1, 2, 3, ...] values 
values = ['v1', 'v2'] 

# data with description from above is saved in data 
for value in values: 
    data[ str(data['Column'] + '-' + value)] = data[ value] 

結果は、名前の列です:私が試したものを

Column v1 v2 first-v1 first-v2 second-v1 econd-v2 third-v1 third-v2 
first 1 2  1  2   Nan  Nan  Nan  Nan 
second 3 4  Nan  Nan  3   4   Nan  Nan 
third 5 6  Nan  Nan  Nan  Nan  5  6 

はこのような何かを行うことです。 ['first-v1' 'second-v1'..], ['first-v2' 'second-v2'..] ここには正しい値があります。私は間違っているの?私のデータが大きいので、これを行うより最適な方法はありますか?

ありがとうございました!

答えて

2

あなたはswapingと列にMultiIndexをソートしてunstackを使用することができます。

df = data.set_index('Column', append=True)[values].unstack() 
     .swaplevel(0,1, axis=1).sort_index(1) 
df.columns = df.columns.map('-'.join) 
print (df) 
    first-v1 first-v2 second-v1 second-v2 third-v1 third-v2 
0  1.0  2.0  NaN  NaN  NaN  NaN 
1  NaN  NaN  3.0  4.0  NaN  NaN 
2  NaN  NaN  NaN  NaN  5.0  6.0 

それともstack + unstack

df = data.set_index('Column', append=True).stack().unstack([1,2]) 
df.columns = df.columns.map('-'.join) 
print (df) 
    first-v1 first-v2 second-v1 second-v2 third-v1 third-v2 
0  1.0  2.0  NaN  NaN  NaN  NaN 
1  NaN  NaN  3.0  4.0  NaN  NaN 
2  NaN  NaN  NaN  NaN  5.0  6.0 

最終join元へ:

df = data.join(df) 
print (df) 
    Column v1 v2 first-v1 first-v2 second-v1 second-v2 third-v1 \ 
0 first 1 2  1.0  2.0  NaN  NaN  NaN 
1 second 3 4  NaN  NaN  3.0  4.0  NaN 
2 third 5 6  NaN  NaN  NaN  NaN  5.0 

    third-v2 
0  NaN 
1  NaN 
2  6.0 
+0

うわーはありがとうございましたあなたの答えは、私はthを把握しないだろう私の自己によって、もう一度ありがとう! – poppytop