Python Pandas частичное совпадение списка строк в кадре данных и возврат всей совпадающей частичной строки - PullRequest
0 голосов
/ 10 июля 2020

Привет всем, я пытаюсь сопоставить частичную строку в столбцах во фрейме данных и вернуть строку сопоставления (дело с заглавными буквами). У меня нет сильных знаний в области программирования, и я просто начинаю учиться.

    import os
    import pandas as pd
    import numpy as np
    import re
    state_abbrv = 
    ["AL","AK","AZ","AR","CA","CO","CT","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA",
     "ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK",
      OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY"]
    
    
    
     d = {"Index": [1, 2, 3, 4, 5 , 6, 7], "Description": ["BROOKLYN NY", "M1ANY", 
          "NYNY","DO","nyNY", "CWARD NY", "HOWARD BEACH NY"]}
     df = pd.DataFrame(data=d)

    
    
    
    statesjoin='|'.join(state_abbrv)
    df=df.assign(State = df["Description"].apply(lambda x: 
    ','.join(re.findall('..',x))).str.findall(statesjoin))
    
    print(df)

Текущий результат - неверный

 Index   Description     State
       1      BROOKLYN NY        []
       2            M1ANY        []
       3             NYNY  [NY, NY]
       4               DO        []
       5             nyNY      [NY]
       6         CWARD NY  [AR, NY]
       7  HOWARD BEACH NY      [WA]

Правильный результат

   Index      Description     State
       1      BROOKLYN NY      [NY]
       2            M1ANY      [NY]
       3             NYNY  [NY, NY]
       4               DO        []
       5             nyNY      [NY]
       6         CWARD NY  [WA,AR,NY]
       7  HOWARD BEACH NY  [WA,AR,NY]

1 Ответ

0 голосов
/ 10 июля 2020

Использовать понимание списка с тестовыми значениями списка с помощью оператора in:

df=df.assign(State = df["Description"].apply(lambda x: [y for y in state_abbrv if y in x]))
print (df)
   Index      Description         State
0      1      BROOKLYN NY      [NY, OK]
1      2            M1ANY          [NY]
2      3             NYNY          [NY]
3      4               DO            []
4      5             nyNY          [NY]
5      6         CWARD NY  [AR, NY, WA]
6      7  HOWARD BEACH NY  [AR, NY, WA]

Поскольку ваше решение не возвращает перекрывающиеся строки, здесь AR:

statesjoin='|'.join(state_abbrv)
df=df.assign(State = df["Description"].str.findall(statesjoin))
print (df)
   Index      Description     State
0      1      BROOKLYN NY  [OK, NY]
1      2            M1ANY      [NY]
2      3             NYNY  [NY, NY]
3      4               DO        []
4      5             nyNY      [NY]
5      6         CWARD NY  [WA, NY]
6      7  HOWARD BEACH NY  [WA, NY]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...