मान लें कि मेरे पास निम्नलिखित डेटाफ़्रेम (पूर्णांक का एक स्तंभ और पूर्णांक की सूची वाला एक स्तंभ) है ...
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)