Как отделить несовместимые столбцы в Python? - PullRequest
2 голосов
/ 05 июля 2019

Здесь я прикрепляю фиктивные данные, где столбцы несовместимы, значит, иногда некоторые поля отсутствуют, как разделить и заполнить столбцы, если это 'none', просто предположим, что все эти столбцы являются элементами

фиктивный кадр данных:

feature1 : abc

feature2 : bfj

feature4 : 

feature5 : re


feature1 : werq

feature3 : kgh

feature4 : hjyj

feature5 : re


feature1 : hg

feature2 : jhgyj

feature3 : ytyitli

feature4 : guyhk

feature5 : yyjhj


feature2 : tyty

feature3 : ytrtf

feature4 : ewhgf

feature5 : ihyty

это то, что я ожидаю,

 feature1     feature2       feature3         feature4       feature5 

  abc           bfj           None              None            re

  werq          None          kgh               hjyj            re

  hg            jhgyj         ytyitli           guyhk          yyjhj

  None          tyty          ytrtf             ewhgf          ihyty

Спасибо

1 Ответ

1 голос
/ 05 июля 2019

Идея состоит в том, чтобы создать словарь с уникальными значениями в порядке, подобном потребности в конечных столбцах, здесь путем сортировки с enumerate с отсортированными уникальными значениями, затем Series.map для нового столбца, получить разницу на Series.diff, сравните по Series.lt для < и создайте группы по Series.cumsum и окончательно Dataframe по DataFrame.pivot :

df['col1'] = df['col1'].str.strip(' :')

d = {v: k for k, v in  dict(enumerate(df['col1'].sort_values().unique())).items()}
print (d)
{'feature1': 0, 'feature2': 1, 'feature3': 2, 'feature4': 3, 'feature5': 4}

df['g'] = df['col1'].map(d).diff().lt(-1).cumsum()

df1 = df.pivot('g', 'col1', 'col2')
print (df1)
col1 feature1 feature2 feature3 feature4 feature5
g                                                
0         abc      bfj      NaN     None       re
1        werq      NaN      kgh     hjyj       re
2          hg    jhgyj  ytyitli    guyhk    yyjhj
3         NaN     tyty    ytrtf    ewhgf    ihyty
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...