2017-04-30 7 views
2

パンダのデータフレームは1つの列に文字列のみが含まれています。別の列に基づくパンダデータフレームの列の作成

df= pd.DataFrame(
    { 
    "A": [2,4,7,17,39], 
    "B": ["apple","apple","broccoli","rose","apple"] 
    } 
) 

この列「B」を調べて、文字列に単語の特定の部分が含まれていることを確認します。次に、 "app"が行内にあるときはいつでも "fruit"、 "brocc"が出現するときはいつでも "ros"が表示され、野菜はいつでも表示される "flower"という一連の文字列を含む新しい列 "C"を作成します。

最終データフレームは、次のようになります。

df= pd.DataFrame(
    { 
    "A": [2,4,7,17,39], 
    "B": ["apple","apple","broccoli","rose","apple"], 
    "C": ["fruit","fruit", "vegetable", "flower", "fruit"] 
    } 
) 

答えて

2

あなたは、コンバータとしての辞書を使用することができ、ANそれはapplyのための入力としてget方法です:あなたが必要となる部分一致の場合

converter = {'apple': 'fruit', 
      'broccoli': 'veg', 
      'rose': 'flower'} 

df['C'] = df['B'].apply(converter.get) 
print(df) 
    A   B  C 
0 2  apple fruit 
1 4  apple fruit 
2 7 broccoli  veg 
3 17  rose flower 
4 39  apple fruit 

これを少し変更する:

converter = {'app': 'fruit', 
      'brocc': 'vegetable', 
      'ros': 'flower'} 

df['C'] = df['B'].apply(lambda original: next(val for key, val in converter.items() if key in original)) 
print(df) 
    A   B   C 
0 2  apple  fruit 
1 4  apple  fruit 
2 7 broccoli vegetable 
3 17  rose  flower 
4 39  apple  fruit 

next(val for key, val in converter.items() if key in original)は、「行」にある最初に見つかったキーの辞書から値を返します。

3

辞書

d = {'apple': 'fruit', 'broccoli': 'vegetable', 'rose': 'flower'} 

を作成し、それを使用mapreplace(マップが速く、このためです):

df['B'].map(d) 
Out: 
0  fruit 
1  fruit 
2 vegetable 
3  flower 
4  fruit 
Name: B, dtype: object 

df['B'].replace(d) 
Out: 
0  fruit 
1  fruit 
2 vegetable 
3  flower 
4  fruit 
Name: B, dtype: object 
+0

は、私は少し質問を編集しているので、エンティティのISN」のフルネーム必要です。これはあなたが提供した答えを変えますか? – John

+0

@ジョンあなたは通常、質問を簡単な方法で変更しないでください(特に回答を無効にすることができる場合)。代わりに新しい質問をしてください。 – MSeifert

+0

@Johnいいえ、これは部分一致のためには機能しません。問題のルールはあまり明確ではありません。単語の部分はあらかじめ決められていますか?例えば、あなたはこのような辞書を作ることができるだろうか?または、この辞書を使用しますが、部分一致がある場合は値を返しますか?後者については、どんな種類のマッチングが受け入れられるかを明確にする必要があります。 'o'しかないとどうなりますか?それは野菜か花ですか? – ayhan

関連する問題