2017-06-10 14 views
0

私のパンダのデータフレームに列名を持つ4つの列があり、それぞれA、B、C、DがUIのフィールドにマップされています。それぞれは独自の目的を持っていますが、ユーザーはフィールドAまたはBまたはCまたはDのフィールドA情報を入力しています。データをクリーンアップして解析のためにA列に移動しようとしています。したがって、列Aに値がある場合は、BまたはCまたはDの値は気にしません。ただし、列Aに値がない場合は、他の列のユーザーエントリを探して列Aを取得する必要があります列Aの実際の値は常にリストからのいくつかの値で始まります。したがって、列Aにデータがない場合は、列Bの値を検索し、その値がリストの値であるかどうかを確認し、列Bがヌルであるか、私たちのリストからの値よりも他の値は、それを残して、D列同様、C列でも同じことを確認してください。複数のif条件に基づいたpython pandas列

不明な点がある場合は教えてください。

例、

mylist = ['senior','junior','midlevel'] 

inputdf 

A  B  C   D 
senior male senior  UK 
     senior candidate USA 
     female junior  
junior male junior  AU 
     male candidate midlevel 
     female candidate AU 


Outputdf, 

A   B  C   D 
senior  male  senior  UK 
senior  senior candidate USA 
junior  female junior 
junior  male junior  AU 
midlevel male candidate midlevel 
      female candidate AU 

答えて

0

あなたがDFを反復処理し、列「A」に値を返すためにapply機能を使用することができます。

def func(row): 
    for index_val, series_val in row.iteritems(): 
     if (series_val in mylist): 
      return series_val 

df['A'] = df.apply(func, axis = 1)

このコードをチェックAの値がmylist中に存在する場合。はいの場合はその値を返し、それ以外の場合はBをチェックしていきます。

+0

ありがとうございました。しかし、いくつかの場合、mylistの値は複数回現れます。例えば、列Aには値がありませんが、列Bにはジュニア、列Cにはジュニアです。この場合、列Aに重複が書き込まれます。最初に見つかった列。 –

+0

値が返されると、重複した比較は行われません。 return文が実行されるとすぐにループが壊れ、関数はそれ以上の比較を行いません。それでも問題に直面している場合は、コードを実行する前後にいくつかの例を追加することができます。 –

+0

ありがとうございます。私は適用関数が一度に1つの列を関数に渡すと思う。 –

関連する問題