2017-11-17 9 views
0

パンダでは、'Windows 7', 'Windows 10', 'Linux', 'Mobile iOS 9.1', 'OS X 10.12'などのさまざまなオペレーティングシステムの分類を持つ['name']という列があります。これは文字列です。パンダの行の上に関数を適用する

私はより一般的なバージョンになります新しい列['type']を作成するには、この機能を使用することを期待しています:

def name_group(row): 
    if 'Windows' in row: 
     name = 'Microsoft Windows' 
    elif 'iOS' in row: 
     name = 'Apple iOS' 
    elif 'OS X' in row: 
     name ='Apple Macintosh' 
    elif 'Macintosh' in row: 
     name = 'Apple Macintosh' 
    elif 'Linux' in row: 
     name = 'GNU/Linux' 
    else: 
     name = 'Other' 
    return name 

それは私は、単一の文字列変数に渡すことによって、機能をテストするときに正しく動作しますが、用何らかの理由で、このような関数をdfに適用すると、各行に対して「その他」だけが返されます。

new_df['type'] = new_df.apply(name_group, axis=1) 

これを引き起こしている可能性がどのように任意の考え?

答えて

0

あなたはSeries.applyでカラムnameを渡す必要があります。

new_df['type'] = new_df.apply(lambda x: name_group(x['name']), axis=1) 
+0

ありがとうございました。その後、lambda機能を必要とあまりにも列の名前を渡しDataFrame.applyを使用したい場合は

new_df['type'] = new_df['name'].apply(name_group) 

しかし!それは素晴らしい仕事でした。唯一の変更は、関数の最後に 'return str(name)'を返すように 'return name'を変更することです。 – cdc200

+0

あなたは大歓迎です!私の答えが役に立ったら、[accept](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。答えの横にあるチェックマーク( '✓')をクリックしてグレー表示にします記入してください。ありがとう。 – jezrael

関連する問題