繁体   English   中英

如何匹配 2 个数据帧的键并使用匹配键创建新的 df?

[英]How to match keys of 2 data frames and create new df with matching keys?

我有 2 个 DataFrame,它们的键如下所示:

df:

Index(['artistName', 'artForm/nameOfArt/practicedSkill', 'state', 'district',
       'village', 'pinCode', 'dob/yearOfBirth/date', 'gender', 'phone',
       'email', 'differentlyAbled', 'languages', 'exp',
       'category/SC/ST/OBC/General', 'scheme', 'organisation'],
      dtype='object')

df1:

Index(['S.NO', 'artForm/nameOfArt/practicedSkill','exp', 'organisation',
   'Complete Address of the organisation/individuals associated',
   'artistName', 'Father's Name', 'dob/yearOfBirth/date', 'gender',
   'languages', 'Address - 1', 'Address - 2', 'State', 'District',
   'Pin Code', 'phone', 'EXPERIENCE', 'scheme', 'Email id of artist ',
   'Submitted By'],
  dtype='object')

我想匹配键并从 df1 中选择所需的列来创建一个新的 df。

到目前为止我的代码(不工作)

import pandas as pd
from difflib import get_close_matches
df = pd.DataFrame(columns = ['artistName', 'artForm/nameOfArt/practicedSkill', 'state', 'district', 'village', 'pinCode', 'dob/yearOfBirth/date', 'gender', 'phone', 'email', 'differentlyAbled', 'languages', 'exp', 'artAcademy', 'category/SC/ST/OBC/General', 'scheme'])
df1 = pd.read_excel("C:\\Users\\Desktop\\Culture\\Madur.xlsx")
df.apply(lambda x: x.astype(str).str.lower())
df1.apply(lambda x: x.astype(str).str.lower())
df2 = pd.DataFrame()
seq = [r for r in df.keys() if get_close_matches(r, df1.keys(), n=1, cutoff = .50)]
seq

序号 =

    ['artistName',
 'artForm/nameOfArt/practicedSkill',
 'state',
 'district',
 'village',
 'pinCode',
 'dob/yearOfBirth/date',
 'gender',
 'phone',
 'email',
 'languages',
 'exp',
 'scheme',
 'organisation']

我想要的是从seq变量中选择列并制作一个 df。 有几个文件需要像这样与df进行比较。

我能够从df1中提取我需要选择的列,但我该怎么做呢? 'finalList' 包含需要从df1中选取的列列表。

如果我理解正确的问题,这应该有效:

  df_cols = df.columns
  df1_cols = df_1.columns

  new_col = []
  for col in df_cols:
      if col in df1_cols:
           new_col.append(col)

 df_new = df[new_col]

你快到了——Pandas 数据框毫无问题地接受列名列表:

seq = [r for r in df1.keys() if get_close_matches(r, df.keys(), n=1, cutoff = .50)]
df2 = df1[seq]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM