2017-08-29 6 views
1

私は一般的にはPythonとプログラミングには初めてです。他の列の対応する位置でパンダの条件付き戻り値

私は、pandasの別の列の対応する位置にカンマ区切り値を返し、この出力を新しい列に格納する方法を理解しようとしています。私は次のような出力たい

key_list = [cat, dog, pig] 

A   B 
--------------------- 
1   cat 
1, 2  dog, cat 
1, 2, 3  pig, dog, cat 

以下の私の例を参照してください:だから

A   B   cat_result  dog_result  pig_result 
---------------------------------------------------------------- 
1   cat   1    NAN   NAN 
6, 2  dog, cat  2    6    NAN 
8, 3, 1  pig, dog, cat 1    3    8 

を、私はキーの存在をチェックできるようにしたいと思います(A、BまたはC) B列に存在する場合は、そのセル内の対応するコンマ区切り値の列Aの値を返します。

これまでのところ、私はこれがあります。各key_resultための新しい列を作成していない場合、キーはBまたは0の中に存在している場合は1を与える

for key in key_list: 
    df["{}_result".format{key}] = df.apply(lambda _: int(key in _.B), axis=1) 

を。ここからどこに行くのか、これが正しいアプローチであるかはわかりません。どんな助けも大歓迎です。ありがとう!

答えて

1

lambdanp.core.defchararray.splitを使用して、列の値を分割します。私はpd.Series.str.splitを使うことができたが、私はこれを選んだ。

次に、lambdaを使用して、行ごとに繰り返して辞書のリストを作成します。その辞書のリストは、pd.DataFrameコンストラクタに渡すことができます。

最後に、joinを使用して元のデータフレームを添付します。

s = lambda x: np.core.defchararray.split(x.values.astype(str), ', ') 
df.join(
    pd.DataFrame(
     [dict(zip(*t)) for t in zip(s(df.B), s(df.A))] 
    ).add_suffix('_result') 
) 

     A    B cat_result dog_result pig_result 
0  1   cat   1  NaN  NaN 
1  6, 2  dog, cat   2   6  NaN 
2 8, 3, 1 pig, dog, cat   1   3   8 
+0

これは素晴らしいことですが、私は本当に申し訳ありませんが、私の問題を簡略化してキーを1文字に減らしました。これをフレーズ全体に合わせる方法がありますか? key_list = [a、b、c]ではなく、key_list = [cat、dog、pig]?元のQを追加するように更新します。 – 0mm3

+0

同じ方法で動作します。 – piRSquared

+0

ありがとう、時間を割いてくれてありがとう! – 0mm3

関連する問題