2017-06-16 10 views
1

私は4列のパンダにデータフレームを持っています。データは文字列で構成されます。サンプル:パンダは、別の列の条件に基づいて選択的に列の値を上書きします。

  A     B    C  D 
0   2   asicdsada   v:cVccv  u 
1   4  ascccaiiidncll  v:cVccv:ccvc  u 
2   9    sca    V:c  u 
3  11    lkss    v:cv  u 
4  13    lcoao   v:ccv  u 
5  14   wuduakkk   V:ccvcv:  u 

私は文字列を置換する「U」はコルDの文字列と、その行に 'もしコルCは、サブストリング「V」(大文字と小文字を区別)を含みます。 望ましい結果:

  A     B    C  D 
0   2   asicdsada   v:cVccv  a 
1   4  ascccaiiidncll  v:cVccv:ccvc  a 
2   9    sca    V:c  a 
3  11    lkss    v:cv  u 
4  13    lcoao   v:ccv  u 
5  14   wuduakkk   V:ccvcv:  a 

私は列Dにすでに値を上書きするのではなく、私が選択的に異なる条件の下で、再び後でこれらの値の一部を上書きしたいと思いますので、2つの異なる値を割り当てることを好みます。

これは簡単な解決策が必要なようですが、私はそれを理解することができず、他の答えられた質問に完全に適用可能な解決策を見つけることができませんでした。

df.ix[1]["D"] = "a" 

は、個々の値を変更します。

df.ix[:]["C"].str.contains("V") 

は一連のブール値を返しますが、どうしたらよいか分かりません。私は多くの多くの.loc、apply、contains、re.search、forループの組み合わせを試していますが、どちらかのエラーが出たり、D列のすべての値を置き換えます。私はpandas/pythonの初心者です。私の構文、方法、または私がしなければならないことの概念化はオフになっています(おそらく上記のすべて)。

答えて

1

すでにお試しいただいたとおり、str.containsを使用してブール値の系列を取得し、.locを使用して「これらの行とD列を変更する」としてください。たとえば:

In [5]: df.loc[df["C"].str.contains("V"), "D"] = "a" 

In [6]: df 
Out[6]: 
    A    B    C D 
0 2  asicdsada  v:cVccv a 
1 4 ascccaiiidncll v:cVccv:ccvc a 
2 9    sca   V:c a 
3 11   lkss   v:cv u 
4 13   lcoao   v:ccv u 
5 14  wuduakkk  V:ccvcv: a 

.ixを使用しないでください - それは正式に廃止ています。)

+0

ありがとうございます!私はこれをもっと複雑にしなければならないことを知っていました! – largercat

関連する問題