Изменить форму данных Pandas по определенной строке - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть набор данных CSV, который выглядит следующим образом:

###12345
LABEL     text
LABEL     text
###12213
LABEL     text
LABEL     text

Я хочу преобразовать его в эту форму

12345 LABEL    text
12345 LABEL    text
12213 LABEL    text

Мой первый подход состоял в том, чтобы отфильтровать строки, подобные этой

#df['label'].str.contains("###", na=False) 

, но не удалось изменить его в качестве индекса.

Не могли бы вы помочь мне в этом? Спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Использование:

print (df)
            label
0        ###12345
1  LABEL     text
2  LABEL     text
3        ###12213
4  LABEL     text
5  LABEL     text

#boolean mask
m = df['label'].str.contains("###", na=False) 
#helper column with repalce non ### values to NaNs and repalce it by last non NaN value
df['new'] = df['label'].where(m).ffill()
#remove rows with same values
df = df[df['label'] != df['new']].copy()
#extract new column and add to original
df['label'] = df.pop('new').str.lstrip('#') + ' ' + df['label']
print (df)
                  label
1  12345 LABEL     text
2  12345 LABEL     text
4  12213 LABEL     text
5  12213 LABEL     text

print (df)
      label value
0  ###12345   NaN
1     LABEL  text
2     LABEL  text
3  ###12213   NaN
4     LABEL  text
5     LABEL  text


m = df['label'].str.contains("###", na=False) 

df['new'] = df['label'].where(m).ffill()
df = df[df['label'] != df['new']].copy()
df['label'] = df.pop('new').str.lstrip('#') + ' ' + df['label']
print (df)
         label value
1  12345 LABEL  text
2  12345 LABEL  text
4  12213 LABEL  text
5  12213 LABEL  text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...