मेरे पास अलग-अलग डेटाफ्रेम में पढ़ने के लिए मेरे कच्चे डेटा के रूप में दो सीएसवी फाइलें हैं। एक को 'कर्मचारी' और दूसरे को 'मूल' कहा जाता है। हालाँकि, मैं यहाँ फ़ाइलें अपलोड नहीं कर सकता इसलिए मैंने डेटा को नीचे दिए गए डेटाफ़्रेम में हार्डकोड किया। जिस कार्य को मैं हल करने का प्रयास कर रहा हूं वह है मूल_विवरण में 'देश' कॉलम के मान के आधार पर कर्मचारी_विवरण में 'योग्य' कॉलम को 'हां' या 'नहीं' के साथ अद्यतन करना। अगर देश = यूके, तो उस Personal_ID के लिए योग्य कॉलम में 'हां' डालें। नहीं तो 'नहीं' डाल दें।

import pandas as pd
import numpy as np

employee = {
        'Personal_ID': ['1000123', '1100258', '1104682', '1020943'],
        'Name': ['Tom', 'Joseph', 'Krish', 'John'],
        'Age': ['40', '35', '43', '51'],
        'Eligible': ' '}

origin = {
        'Personal_ID': ['1000123', '1100258', '1104682', '1020943', '1573482', '1739526'],
        'Country': ['UK', 'USA', 'FRA', 'SWE', 'UK', 'AU']}


employee_details = pd.DataFrame(employee)

origin_details = pd.DataFrame(origin)

employee_details['Eligible'] = np.where((origin_details['Country']) == 'UK', 'Yes', 'No')

print(employee_details)
print(origin_details)

उपरोक्त कोड का आउटपुट निम्न त्रुटि संदेश दिखाता है:

ValueError: Length of values (6) does not match length of index (4)

हालांकि, मैं नीचे अपने आउटपुट के रूप में देखने की उम्मीद कर रहा हूं।

  Personal_ID    Name Age Eligible
0     1000123     Tom  40    Yes     
1     1100258  Joseph  35    No   
2     1104682   Krish  43    No     
3     1020943    John  51    No

मैं ValueError संदेश में निर्दिष्ट आकार से मेल खाने के लिए अपने डेटाफ्रेम में कुछ भी हटाना नहीं चाहता क्योंकि मुझे बाद में मूल_विवरण में अतिरिक्त व्यक्तिगत_आईडी की आवश्यकता हो सकती है। वैकल्पिक रूप से, मैं सभी मौजूदा पर्सनल_आईडी को कच्चे डेटा (कर्मचारी_विवरण, मूल_विवरण) में रख सकता हूं और उन रिकॉर्डों को निकालने के लिए एक नया डेटाफ्रेम बना सकता हूं जिनमें समान Personal_ID है और वहां से np.where() स्थिति निर्धारित करें।

कृपया सलाह दें! किसी भी मदद की सराहना की जाती है, धन्यवाद !!

0
user01 5 सितंबर 2021, 04:20

3 जवाब

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

आप व्यक्तिगत आईडी पर 2 डेटाफ़्रेम मर्ज कर सकते हैं और फिर उपयोग कर सकते हैं np.where

सभी व्यक्तिगत आईडी रखने के लिए how='outer' के साथ मर्ज करें

df_merge = pd.merge(employee_details, origin_details, on='Personal_ID', how='outer')

df_merge['Eligible'] = np.where(df_merge['Country']=='UK', 'Yes', 'No')


    Personal_ID Name    Age    Eligible Country
0   1000123     Tom     40     Yes      UK
1   1100258     Joseph  35     No       USA
2   1104682     Krish   43     No       FRA
3   1020943     John    51     No       SWE
4   1573482     NaN     NaN    Yes      UK
5   1739526     NaN     NaN    No       AU

यदि आप सभी व्यक्तिगत आईडी नहीं रखना चाहते हैं तो आप how='inner' के साथ विलय कर सकते हैं और आपको NAN दिखाई नहीं देंगे

df_merge = pd.merge(employee_details, origin_details, on='Personal_ID', how='inner')

df_merge['Eligible'] = np.where(df_merge['Country']=='UK', 'Yes', 'No')

    Personal_ID Name    Age    Eligible Country
0   1000123     Tom     40     Yes      UK
1   1100258     Joseph  35     No       USA
2   1104682     Krish   43     No       FRA
3   1020943     John    51     No       SWE
1
Shubham Periwal 5 सितंबर 2021, 03:08

आप एक Numpy मेथड, np.where((origin_details['Country'])) के अंदर पंडों सीरीज ऑब्जेक्ट का उपयोग कर रहे हैं। मेरा मानना ​​है कि यही समस्या है।

प्रयत्न:

employee_details['Eligible'] = origin_details['Country'].apply(lambda x:"Yes" if x=='UK' else "No") 

डेटाफ़्रेम का विश्लेषण करने के लिए पांडा लाइब्रेरी का उपयोग करने के बजाय उन्हें वापस सुन्न सरणियों में परिवर्तित करना हमेशा बहुत आसान और तेज़ होता है

1
atline 5 सितंबर 2021, 06:02

ठीक है, पहली चीज जिसके बारे में मैं उत्तर देना चाहता हूं वह है अपवाद और आप कितने भाग्यशाली हैं कि ऐसा नहीं होता यदि आपकी टेबल समान लंबाई की होती तो आपका कोड काम करने वाला था।

लेकिन कोड में एक धारणा है कि मुझे नहीं लगता कि आपने इसके बारे में सोचा था और वह यह है कि आईडी एक ही क्रम में नहीं हो सकते हैं या उदाहरण की तरह कुछ टेबल में दूसरे की तुलना में अधिक आईडी हैं यदि आपके पास समान था तालिकाओं की लंबाई लेकिन उसी क्रम में नहीं, आपको प्रत्येक पंक्ति के लिए गलत योग्य मान मिलते। ऐसा करने का वर्तमान तरीका इस प्रकार है

  1. पहले व्यक्तिगत_आईडी का उपयोग करके तालिका में शामिल हों, लेकिन बाएं जुड़ने का उपयोग करें क्योंकि आप उस व्यक्तिगत आईडी के लिए कोई मूल जानकारी नहीं होने पर डेटा खोना नहीं चाहते हैं।

    Comb_df = pd.merge (कर्मचारी_विवरण, मूल_विवरण, पर = 'व्यक्तिगत_आईडी', कैसे = 'बाएं')

  2. नया कॉलम भरने के लिए लागू फ़ंक्शन का उपयोग करें

    कंबाइन_डीएफ ['पात्र'] = कंबाइन_डीएफ ['देश']। लागू करें (लैम्ब्डा एक्स: 'हां' अगर एक्स == 'यूके' और 'नहीं')

1
gal peled 5 सितंबर 2021, 06:22