2017-12-06 8 views
0

で複数の列に異なる条件での値を置き換えます私はこのようなデータフレームに何かを持っていますが、はるかに大きいパンダ

source next1  next2  next3 
    b1  {-}  b2  -,b2,b3 
    b2,b3  - {b2,b3} {b2,b3,b4} 

今、私はここに文字の多くを交換する必要があります。次のすべての列には、前の値を含める必要があります。値が - 、または、以前のことを意味する{ - }の場合は、それも何もない場合は、前にする必要があります。 所望の出力:私はこのような何かを試してみました

source next1 next2  next3 
b1  b1  b2  b1,b2,b3 
b2,b3 b2,b3 b2,bb3 b2,b3,b4 

for val in df['source'].values: 
    if values=b1: 
     df['next1'].replace('{-},', 'b1,',regex=True, inplace=True) 
     df['next1'].replace('-,', 'b1,',regex=True, inplace=True) 

など しかし、私はそんなに行、およびcondiditonsを持っているので、これは長い間に動作していないところ正確な、エラーがあります。すべての行に1つの値を置き換えます。

答えて

0

私は文字列の操作が常に遅いishですので、あなたの質問に速い解決策があるとは思わない。それでも、より良い/より速いものがあります。

ストレートフォワード溶液をそれに

for i in range(1, df.shape(1)): # here only order matters 
    df.iloc[:, i].str.replace('{-}', '-', inplace=True) 
    mask = df.iloc[:, i].str.contains('-') 
    df.iloc[mask, i].str.replace('{-}', df.iloc[mask, i-1], inplace=True) 

になり、すべての列を有するとしてセット({})、そのようなものとして、それらを操作するWAY速くなる可能性があります。

+0

この部分をありがとうございます。ある列から別の列に(+)文字列値を追加する方法はありますか?例えば、加算後:b1、b2、b1、b3。どのようにb1、b2、b3を値として維持するか? – jovicbg

+0

私はそれが だと思います1)いくつかのコードで可能です 2)本当に恐ろしい考えです。なぜ、セットで作業するのではなく、最後に文字列に変換するのではなく、文字列の形で 'sets'を再作成しようとしていますか? 私はあなたのデータを取得する場所に戻って、代わりにセットを取得したり、文字列をパースしてセットにする方法を見つけるべきだと思います。その後、あなたの問題は、上記のループで2つのセットを追加すること(そして '-'を削除すること)に沸きます。 構文解析のアプローチは、 'set(el.replace(" { - } "、 ' - ')。replace( '{'、 '').replace( '}'、 '').split '、')) ' –

関連する問題