私はif x in y
文を実行するとValueErrorをスローするパンダで実行している小さな関数を持っています。ブーリアンインデックス、.isin()
、およびwhere()
を推奨する同様の問題が発生しましたが、いずれの例も私の場合には適用できませんでした。どんなアドバイスも非常に高く評価されます。パンダ:ループを反復する代替手段
その他の注意:groups
は、データフレーム外の文字列を含むリストです。この関数の私の目標は、データフレームのアイテムがどのリストにあるのかを確認し、そのリストのインデックスを返します。私の最初のバージョンのノートブックリンクでは、iterrows
を使ってデータフレームをループしていますが、ほとんどの場合、これは最適ではないと私は理解しています。いくつかの偽のデータと
Jupyterノート:https://github.com/amoebahlan61/sturdy-chainsaw/blob/master/Grouping%20Test_1.1.ipynb
ありがとうございました!
コード:
def groupFinder(item):
for group in groups:
if item in group:
return groups.index(group)
df['groupID2'] = groupFinder(df['item'])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-16-808ac3e51e1f> in <module>()
4 return groups.index(group)
5
----> 6 df['groupID2'] = groupFinder(df['item'])
<ipython-input-16-808ac3e51e1f> in groupFinder(item)
1 def groupFinder(item):
2 for group in groups:
----> 3 if item in group:
4 return groups.index(group)
5
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
953 raise ValueError("The truth value of a {0} is ambiguous. "
954 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 955 .format(self.__class__.__name__))
956
957 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
ソリューション 私はいくつかのパンダのブログ記事に出くわしたとも私にapply
機能をパンダを使用してiterrows
を使用してスキップし溶液を得たのredditユーザーからのフィードバックを得ました。
df['groupID2'] = df.item.apply(groupFinder)
ご協力いただきありがとうございます。
一般に、質問にはデータへのリンクを含めるのは良い考えではありません。リンクは死ぬことも、もう1つは死ぬこともあります。この場合、リンク*をクリックしてもノートブックには行きません(URLストリングをブラウザにコピーしても機能します)。あなたの質問を参照として使用する可能性のある他の人のために、サンプルデータと設定をあなたの投稿のテキストに[最小限の完全で証明可能な例]として移動することを検討してください(https://stackoverflow.com/help/ mcve)。 –
@andrew_reece質問とコードの礼儀で頭をアップしていただきありがとうございます。今後もそれを必ず使用していきます。 –