Giả sử tôi có khung dữ liệu sau (cột số nguyên và cột có danh sách số nguyên) ...
ID Found_IDs
0 12345 [15443, 15533, 3433]
1 15533 [2234, 16608, 12002, 7654]
2 6789 [43322, 876544, 36789]
Và cũng là một danh sách ID riêng biệt ...
bad_ids = [15533, 876544, 36789, 11111]
Cho rằng, và bỏ qua df['ID']
cột và bất kỳ chỉ mục nào, tôi muốn xem liệu có bất kỳ ID nào trong bad_ids
danh sách được đề cập trong df['Found_IDs']
cột không. Mã tôi có cho đến nay là:
df['bad_id'] = [c in l for c, l in zip(bad_ids, df['Found_IDs'])]
Điều này hoạt động nhưng chỉ khi bad_ids
danh sách dài hơn khung dữ liệu và đối với tập dữ liệu thực, bad_ids
danh sách sẽ ngắn hơn rất nhiều so với khung dữ liệu. Nếu tôi đặt bad_ids
danh sách chỉ có hai yếu tố ...
bad_ids = [15533, 876544]
Tôi nhận được một lỗi rất phổ biến (tôi đã đọc nhiều câu hỏi với cùng một lỗi) ...
ValueError: Length of values does not match length of index
Tôi đã thử chuyển đổi danh sách thành một chuỗi (không thay đổi lỗi). Tôi cũng đã thử thêm cột mới và đặt tất cả các giá trị False
trước khi thực hiện dòng hiểu (một lần nữa không có thay đổi trong lỗi).
Hai câu hỏi:
- Làm cách nào để mã của tôi (bên dưới) hoạt động cho danh sách ngắn hơn khung dữ liệu?
- Làm cách nào để tôi nhận được mã để viết ID thực tế được tìm thấy trở lại
df['bad_id']
cột (hữu ích hơn Đúng / Sai)?
Sản lượng dự kiến cho 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
Đầu ra lý tưởng cho bad_ids = [15533, 876544]
(ID) được ghi vào một cột hoặc cột mới):
ID Found_IDs bad_id
0 12345 [15443, 15533, 3433] 15533
1 15533 [2234, 16608, 12002, 7654] False
2 6789 [43322, 876544, 36789] 876544
Mã số:
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)