Skip to main content

Map two dataframe base on a column and create a new column. Also match partial matching

I have two dataframe

One with codes and values need to map to other dataframe

B = pd.DataFrame({'Code': ['a', 'b', 'c', 'a', 'e','b','b','c'],
                  'Value': ["House with indoor pool", "House with Gray_C_Door", "Big Chandelier",
                            "Window Glass", "Frame Window",'High Column','Wood Raling', 'Window Glass trim']})

Other datframe content lots of data with values and need to make a new column base on dataframe "B" column "Code".

A = pd.DataFrame({'Test': [2,34,12,45,np.nan,34,56,23,56,87,23,67,89,123,np.nan],
                  'Name': [ "House with indoor pool","House with Gray_C_Door",'House with indoor pool and Porch',"Wood Raling",
                           'Window Glass Tinted',"Windows Glass_with",'Big Chandelier', "Frame Window",np.nan,"Window glass","House with indoor pool",'High column with',
                           "Window Glass trim",'Frame Window',"glass Window"],
                 'Value': ["50", "100", "70", "20", "15",'75','50',"10", "10", "34", "5", "56",'12','83',np.nan]})
A.loc[:,'NewName'] = A['Name']

So I'm using the below code to replace A['NewName'].

A['NewName']= A['NewName'].replace(B.set_index('Value')['Code'])

    Test    Name                                Value   NewName
0   2.0000  House with indoor pool              50      a
1   34.0000 House with Gray_C_Door              100     b
2   12.0000 House with indoor pool and Porch    70      House with indoor pool and Porch
3   45.0000 Wood Raling                         20      b
4   NaN     Window Glass Tinted                 15      Window Glass Tinted
5   34.0000 Windows Glass_with                  75      Windows Glass_with
6   56.0000 Big Chandelier                      50      c
7   23.0000 Frame Window                        10      e
8   56.0000 NaN                                 10      NaN
9   87.0000 Window glass                        34      Window glass
10  23.0000 House with indoor pool              5       a
11  67.0000 High column with                    56      High column with
12  89.0000 Window Glass trim                   12      c
13  123.000 Frame Window                        83      e
14  NaN     glass Window                        NaN     glass Window

However, some A['NewName'] are not matching with B['Value'] and doesn't give an exact expected outcome.

Is there a way, I can match those values when It has partial matching with A['NewName'] and give the correct code? I mean for instance when A['NewName'] has "House with indoor pool and Porch" I want to match it with B['Value'] = 'House with indoor pool' and replace it with correct B['Code] = 'a'. I couldn't add that to the data frame B Values column because there are several ways it could change after "House with indoor pool" (for ex: "House with indoor pool_ with big glass door", "House with indoor pool and High railings" etc.)

Is this possible to do it in a map/replace function or any other method?

Thanks in advacne!



source https://stackoverflow.com/questions/71888573/map-two-dataframe-base-on-a-column-and-create-a-new-column-also-match-partial-m

Comments

Popular posts from this blog

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console...

How to split a rinex file if I need 24 hours data

Trying to divide rinex file using the command gfzrnx but getting this error. While doing that getting this error msg 'gfzrnx' is not recognized as an internal or external command Trying to split rinex file using the command gfzrnx. also install'gfzrnx'. my doubt is I need to run this program in 'gfzrnx' or in 'cmdprompt'. I am expecting a rinex file with 24 hrs or 1 day data.I Have 48 hrs data in RINEX format. Please help me to solve this issue. source https://stackoverflow.com/questions/75385367/how-to-split-a-rinex-file-if-i-need-24-hours-data