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
를 사용하여 건너 뜁니다 솔루션을 준 레딧 사용자로부터 어떤 피드백을 얻었다.
df['groupID2'] = df.item.apply(groupFinder)
여러분의 도움과 의견에 감사드립니다.
일반적으로 질문에 데이터에 대한 링크를 포함하는 것은 좋지 않습니다. 링크가 죽을 수도 있고, 또 다른 경우에는 도움이 될 수도 있습니다. 이 경우 URL * 문자열을 브라우저로 복사해도 링크는 * 노트 *로 이동하지 않습니다. 질문을 참조로 사용할 수있는 다른 사람들의 이익을 위해 예제 데이터와 설정을 [최소한의 완전하고 검증 가능한 예] (https://stackoverflow.com/help/) 게시물의 텍스트로 옮기는 것을 고려하십시오. mcve). –
@andrew_reece 질문 및 코드 예의에 감사드립니다. 앞으로도 계속 사용할 것입니다. –