前提・実現したいこと
データの中にあるidの重複を削除し、
残ったidごとに1を付与するフラグを立てたいと
考えております。
そこで以下で示す関数を定義したのですが、
予期せぬエラーが起きてしまいました。
発生している問題・エラーメッセージ
AttributeError Traceback (most recent call last) <ipython-input-53-6efcfb21eace> in <module> 4 return 1 5 ----> 6 data['first_apply'] = data['uid'].apply(apply) c:\users\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds) 4036 else: 4037 values = self.astype(object).values -> 4038 mapped = lib.map_infer(values, f, convert=convert_dtype) 4039 4040 if len(mapped) and isinstance(mapped[0], Series): pandas\_libs\lib.pyx in pandas._libs.lib.map_infer() <ipython-input-53-6efcfb21eace> in apply(first) 1 #最初の応募フラグ 2 def apply(first): ----> 3 first.drop_duplicates 4 return 1 5 AttributeError: 'str' object has no attribute 'drop_duplicates'
該当のソースコード
Python
1def apply(first): 2 first.drop_duplicates 3 return 1 4 5data['first_apply'] = data['uid'].apply(apply)
uidはobject型になっています。
sampleですが、
uid
u2200 *これを残す
u2200 *削除
u2200 *削除
u2111 *これを残す
u2111 *削除
u2009 *これを残す
u2009 *削除
u2001 *これを残す
というデータを
uid first_apply
u2200 1
u2111 1
u2009 1
u2001 1
のようにしたいと考えています。
試したこと
Python
1drop = data['uid'].drop_duplicates 2 3def apply(first): 4 if first == drop: 5 return 1 6 else: 7 return 0 8 9data['first_apply'] = data['uid'].apply(apply)
こうも書いてみましたしたが、
フラグがすべて0になってしまい、
得たい結果とは違うものになってしまいました。
そもそもこのコード自体あまり
効率的ではないかもしれないので、
そのあたりもご意見をお聞かせできればと思います。
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー