2017-11-20 21 views
1

別の列に文字列をスライスする列の値を使用します。パンダデータフレーム:私は次のようにパンダのデータフレームを持って

 col1 col2 col3 
0 1  3  ABCDEFG 
1 1  5  HIJKLMNO 
2 1  2  PQRSTUV 

私はcol1に示すように、位置からcol3の部分文字列である必要があり、別の列を追加しますcol2に示されている位置に移動します。生じるはずであるcol3[(col1-1):(col2-1)]ような何か、:

 col1 col2 col3  new_col 
0 1  3  ABCDEFG ABC 
1 1  5  HIJKLMNO HIJK 
2 1  2  PQRSTUV PQ 

私は次のように試してみました:

my_df['new_col'] = my_df.col3.str.slice(my_df['col1']-1, my_df['col2']-1) 

my_df['new_col'] = data['col3'].str[(my_df['col1']-1):(my_df['col2']-1)] 

Iもしながら、それらの両方は、NaNの列になり2つの数値(すなわちdata['col3'].str[1:3])を挿入しても問題ありません。私はチェックし、型が正しい(int64、int64、object)。また、そのようなコンテキストの外では(たとえばforループを使用して)、私は仕事を終えることができますが、私はDataFrameを利用するライナーを1つ好むでしょう。私は間違って何をしていますか?

答えて

1

使用apply、各行が個別のプロセスである必要がありますので:

my_df['new_col'] = my_df.apply(lambda x: x['col3'][x['col1']-1:x['col2']], 1) 
print (my_df) 
    col1 col2  col3 new_col 
0  1  3 ABCDEFG  ABC 
1  1  5 HIJKLMNO HIJKL 
2  1  2 PQRSTUV  PQ 
+0

それは完全に働きました。ありがとう! –

+0

喜んで助けることができます!いい日! – jezrael

関連する問題