다음 데이터 프레임 (정수 열과 정수 목록이있는 열)이 있다고 가정 해보십시오.
ID Found_IDs
0 12345 [15443, 15533, 3433]
1 15533 [2234, 16608, 12002, 7654]
2 6789 [43322, 876544, 36789]
또한 별도의 ID 목록 ...
bad_ids = [15533, 876544, 36789, 11111]
그것을 감안할 때 df['ID']
열과 색인을 무시 하고 bad_ids
목록 의 ID 가 df['Found_IDs']
열에 언급되어 있는지 확인하고 싶습니다 . 지금까지 가지고있는 코드는 다음과 같습니다
df['bad_id'] = [c in l for c, l in zip(bad_ids, df['Found_IDs'])]
이것은 작동하지만 bad_ids
목록이 데이터 프레임보다 길고 실제 데이터 세트의 경우 bad_ids
목록이 데이터 프레임보다 훨씬 짧을 경우에만 작동합니다 . bad_ids
목록을 두 요소로만 설정하면 ...
bad_ids = [15533, 876544]
매우 인기있는 오류가 발생합니다 (같은 오류로 많은 질문을 읽었습니다) ...
ValueError: Length of values does not match length of index
목록을 시리즈로 변환하려고 시도했습니다 (오류가 변경되지 않음). 또한 False
이해 줄을 수행 하기 전에 새 열을 추가하고 모든 값을 설정하려고 시도했습니다 (오류가 변경되지 않음).
두 가지 질문 :
- 데이터 프레임보다 짧은 목록에 대해 코드 (아래)를 작동 시키려면 어떻게해야합니까?
- 실제 ID를 다시
df['bad_id']
열에 기록하는 코드를 얻으려면 어떻게해야합니까 (True / False보다 유용)?
에 대한 예상 출력 bad_ids = [15533, 876544]
:
ID Found_IDs bad_id
0 12345 [15443, 15533, 3433] True
1 15533 [2234, 16608, 12002, 7654] False
2 6789 [43322, 876544, 36789] True
bad_ids = [15533, 876544]
(ID (들)에 대한 이상적인 출력 은 새로운 열에 기록됩니다) :
ID Found_IDs bad_id
0 12345 [15443, 15533, 3433] 15533
1 15533 [2234, 16608, 12002, 7654] False
2 6789 [43322, 876544, 36789] 876544
암호:
import pandas as pd
result_list = [[12345,[15443,15533,3433]],
[15533,[2234,16608,12002,7654]],
[6789,[43322,876544,36789]]]
df = pd.DataFrame(result_list,columns=['ID','Found_IDs'])
# works if list has four elements
# bad_ids = [15533, 876544, 36789, 11111]
# fails if list has two elements (less elements than the dataframe)
# ValueError: Length of values does not match length of index
bad_ids = [15533, 876544]
# coverting to Series doesn't change things
# bad_ids = pd.Series(bad_ids)
# print(type(bad_ids))
# setting up a new column of false values doesn't change things
# df['bad_id'] = False
print(df)
df['bad_id'] = [c in l for c, l in zip(bad_ids, df['Found_IDs'])]
print(bad_ids)
print(df)