前提・実現したいこと
現在、アンケートベースのデータをクレンジングしています。
そこで好きな商品を聞く質問で、
数字ごとにマスターから商品を当てはめていきたいのですが、
二桁の数字、例えば12の時に1, 2, 12の三つに数字を認識してしまい、
3つの数字全てでフラグが立ってしまいます。
これを12だけでフラグ立てしたいです。
該当のソースコード
Python
1def shampoo13 (row): 2 if '12' in row: 3 return 1 4 else: 5 return 0 6 7data['shampoo13'] = data['a4'].apply(shampoo13)
data['a4']は
0 12 1 2 2 1 3 4 4 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14 ... 123878 7 123879 12 123880 12 123881 14 123882 7 Name: a4, Length: 1123883, dtype: object
となっており、
現状の結果は、
最初の列(12が回答として得られている)で
1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 _1 1_ 0 0 0 0 0 0 0 0 0 0 0 0
のようになっていて、理想の結果は
1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 0_ 0_ 0 0 0 0 0 0 0 0 0 0 0 0
です。
宜しくお願い致します。
quiquiさんにご指摘頂いた 1 2 のコードは
Python
1def shampoo2(row): 2 if '1' in row: 3 return 1 4 else: 5 return 0 6 7data['shampoo2'] = data['a4'].apply(shampoo2) 8 9def shampoo3(row): 10 if '2' in row: 11 return 1 12 else: 13 return 0 14 15data['shampoo3'] = data['a4'].apply(shampoo3)
です。
###試してみたこと
"%02d" %を入れてみて、
Python
1def shampoo13 (row): 2 if '"%02d" %12' in row: 3 return 1 4 else: 5 return 0 6 7data['その他市販'] = data['a4'].apply(shampoo13)
のようにもしてみましたが、
逆に12にフラグが立たなくなってしまいました。。。
何卒お力添え宜しくお願い致します。
data['a4']の中身、現状の結果、理想の結果を提示ください。
記載されているコードで
shampoo13('1') やshampoo13('2')は0が返ってくると思いますが、何が問題ですか?
実際には
if '1' in row
elif '2' in row ・・・と続くコードを書いてるのでしょうか?
can110さん
質問を加筆修正致しました。
宜しくお願い致します。
hellomarthaさん
それが1と2も12の中に含まれると判断してしまい、
1が返ってきてしまいます。
それが問題なのです。
def shampoo2 (row):
□if '1' in row:
□□return 1
□else:
□□return 0
data['shampoo2'] = data['a4'].apply(shampoo2)
みたいなコードが引用していないところにあるのではないですか?(□はインデントです)
quiquiさん
コメントありがとうございます。
それは原因がということですか???
12の時に12だけに立って欲しいのに1, 2, 12に立って困ると言うことですが、考えてみてください。
「12に立っている」という状況は「正しい」のですよね?
「正しくない」のは「1が立っている」と「2が立っている」という状況の方ですよね?
であれば質問に提示するべきなのは「1を立てる処理」と「2を立てる処理」の方ではありませんか?
quiquiさん
なるほど
すぐ加筆修正します。
現状の結果と理想の結果の見方がよく分かりません。
上段「1 2 3 ~」と下段「0 _1 1_~」は何を表しているのでしょうか?
単純に「print(data['shampoo13'])」の、現状と理想の結果を提示されたほうが分かりやすいかと思います。
回答4件
あなたの回答
tips
プレビュー