2016-07-19 8 views
1

私はPandasを初めて使用しており、次のようにはわかりません:別の列の特定のインスタンスの値を1つの列に置き換えます。

私はいくつかの列を持つデータフレームを持っています。一つの列が

OldCat = ['a-nn', 'bb-nm', 'ab-pp', 'ba-nn', 'cc-nm', 'ca-mn'] 

と呼ばれている今、私は新しい方法(NewCat)で/カテゴリOldCatを整理し、新しい列を作成します。具体的には、OldCatの中にa(先頭)、baまたはcaのいずれかが含まれている文字列を検索したいとします。 j = '^ a | ba | ca' NewCatのnanを 'A' OldCatにはjが含まれています。 Rで がこのようなものになるだろう:Rは私の非常に大規模なデータセットと比較的遅いので

j='^a|ba|ca' 
df[(OldCat %like% j),NewCat := str_replace_all(df[(OldCat %like% j),NewCat], "nan", "A")] 

、私はパンダに切り替えることを決めたが、私は同じ結果を取得する方法を確認していません。 乾杯

+0

あなたは 'nan'と他の 'A'と置き換えたいと思っています。 – EdChum

+0

したがって、NewCatは現時点ではnanのみを含む列です。今度はOldCatにjが入っているNewCatでnanを置き換えたい – Laura

+0

あなたが掲示した他の質問への回答を受け入れることを考慮する必要があります。これは人々がSOに関する質問に答えることを助長し、今upvoteすることもできます;) – EdChum

答えて

2

あなたは、文字列'nan'NaNを交換するfillnaとの一致を返すようにベクトル化str.extractを使用することができます。

In [119]: 
df['NewCat'] = df['OldCat'].str.extract('(^a|ba|ca)', expand=False).fillna('nan') 
df 

Out[119]: 
    OldCat NewCat 
0  a  a 
1  bb nan 
2  ab  a 
3  ba  ba 
4  cc nan 
5  ca  ca 

EDIT

IIUCその後、あなただけ設定するlocstr.containsを使用することができます文字列を含む行:

In [137]: 
df.loc[df['OldCat'].str.contains(r'a|ba|ca'), 'NewCat'] = 'A' 
df['NewCat'].fillna('nan', inplace=True) 
df 

Out[137]: 
    OldCat NewCat 
0 a-nn  A 
1 bb-nm nan 
2 ab-pp  A 
3 ba-nn  A 
4 cc-nm nan 
5 ca-mn  A 
+1

希望の出力、また私の更新された答えを確認してください – EdChum

+0

ありがとうございますEdChum!それはとてもうまくいく! – Laura

+0

OK答えを受け入れることを覚えておくことができます、私の答えの左上に空の目盛りが表示されます – EdChum

関連する問題