जब text कॉलम (दिया गया) मेल खाता है तो मैं एक डेटाफ्रेम से दूसरे डेटाफ्रेम के इंडेक्स के साथ इंडेक्स का मैपिंग बनाना चाहता हूं। दोनों डेटाफ़्रेम की लंबाई समान है और हमेशा एक पूर्ण मिलान होने वाला है।

df_original = pd.DataFrame(dict(text=['The cat sat on the table', 'There is a kind of hush', 'The boy kicked the ball', 'He shot the elephant', 'I want to eat right now!']))
df = pd.DataFrame(dict(text=['He shot the elephant', 'The boy kicked the ball', 'The cat sat on the table', 'I want to eat right now!', 'There is a kind of hush']))

df_original ऐसा दिखता है:

0   The cat sat on the table
1   There is a kind of hush
2   The boy kicked the ball
3   He shot the elephant
4   I want to eat right now!

df ऐसा दिखता है:

0   He shot the elephant
1   The boy kicked the ball
2   The cat sat on the table
3   I want to eat right now!
4   There is a kind of hush

मैं शब्दकोश मानचित्रण प्राप्त करना चाहता हूं, जैसे,

d = {2: 0, 4: 1, 1: 2, 0: 3, 3: 4}

उदाहरण के लिए: df का दूसरा इंडेक्स df_original के 0वें इंडेक्स से मेल खाता है। इसलिए उन्हें एक साथ मैप किया जाना चाहिए और इसी तरह।

यदि संभव हो तो मैं वेक्टरकृत संचालन पसंद करता हूं और मैं एक की तलाश में हूं।

मैंने करने की कोशिश की:

d = {}
for i1, r1 in df_original.iterrows():
    for i2, r2 in df.iterrows():
        if r1[0] == r2[0]: 
            d[i2] = i1
print(d)
# {2: 0, 4: 1, 1: 2, 0: 3, 3: 4}

लेकिन यह बहुत धीमा है क्योंकि मेरे पास मिलियन पंक्तियों के क्रम के डेटाफ्रेम हैं।

2
nikinlpds 23 पद 2020, 18:34

2 जवाब

सबसे बढ़िया उत्तर

कोशिश करें merge:

(df_original.reset_index()
   .merge(df.reset_index(), on='text')
   .set_index('index_y')['index_x'].to_dict()
)

बाहर:

{2: 0, 4: 1, 1: 2, 0: 3, 3: 4}
1
Quang Hoang 23 पद 2020, 18:51

आप map आजमा सकते हैं:

df['text'].map(df_original.reset_index().set_index('text')['index']).to_dict()

{0: 3, 1: 2, 2: 0, 3: 4, 4: 1}
1
Shubham Sharma 23 पद 2020, 18:50