বলুন আমার কাছে নিম্নলিখিত ডেটাফ্রেম (পূর্ণসংখ্যার কলাম এবং পূর্ণসংখ্যার তালিকার একটি কলাম) আছে ...
ID Found_IDs
0 12345 [15443, 15533, 3433]
1 15533 [2234, 16608, 12002, 7654]
2 6789 [43322, 876544, 36789]
এবং আইডির একটি পৃথক তালিকা ...
bad_ids = [15533, 876544, 36789, 11111]
এটি দেওয়া হয়েছে এবং df['ID']
কলাম এবং যে কোনও সূচক উপেক্ষা করে bad_ids
তালিকার কোনও আইডি 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
বোধগম্য রেখাটি করার আগে নতুন কলাম যুক্ত করার এবং সমস্ত মান নির্ধারণ করার চেষ্টা করেছি (আবার ত্রুটির কোনও পরিবর্তন হবে না)।
দুটি প্রশ্ন:
- ডেটাফ্রেমের চেয়ে সংক্ষিপ্ত তালিকাটির জন্য কীভাবে আমি আমার কোড (নীচে) পেতে পারি?
df['bad_id']
কলামটিতে পাওয়া সত্যিকারের আইডি (সত্য / মিথ্যা অপেক্ষা আরও কার্যকর ) লিখতে কোডটি কীভাবে পাব ?
এর জন্য প্রত্যাশিত আউটপুট 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 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)