Делать вложенные циклы Python более эффективно - PullRequest
0 голосов
/ 13 июня 2018

Я посмотрел другие объяснения здесь, и ни одно из них не подходит.Код распаковки работает, но он очень медленный.Есть ли лучший метод, который я могу использовать с Python.Я не могу понять, как я могу получить понимание списка, чтобы работать здесь.Любые предложения будут очень полезны.

import pandas as pd

df = pd.DataFrame(data={'a':['A1 + A3','B4 + A4 + D2','C2 + D2'],'b':['L700 + 
          L800','G700','L2600 + L900'],'c':['6','7','8']})
df

    a   b   c
0   A1 + A3 L700 + L800     6
1   B4 + A4 + D2    G700    7
2   C2 + D2 L2600 + L900    8

df2 = pd.DataFrame(columns = df.columns)
for index, row in df.iterrows():
    userLabel = row.loc['a']
    cells = userLabel.split('+') 

    ID = row.loc['b']
    tech = ID.split('+')     
    i = 0
    for cell in cells:

        cell = cell.strip()
        row.loc['a'] = cell
        if i > len(tech)-1:
            i = i-1
        row.loc['b'] = tech[i]
        df2.loc[len(df2)] = row
        i += 1

df2

    a   b   c
0   A1  L700    6
1   A3  L800    6
2   B4  G700    7
3   A4  G700    7
4   D2  G700    7
5   C2  L2600   8
6   D2  L900    8

1 Ответ

0 голосов
/ 13 июня 2018

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

df = (df.set_index('c')
        .stack()
        .str.split('\s+\+\s+', expand=True)
        .stack()
        .unstack(1)
        .ffill()
        .reset_index(level=1, drop=True)
        .reset_index()
        .reindex(columns=['a','b','c'])
        )
print (df)
    a      b  c
0  A1   L700  6
1  A3   L800  6
2  B4   G700  7
3  A4   G700  7
4  D2   G700  7
5  C2  L2600  8
6  C2   L900  8

Объяснение :

  1. Первый set_index для разделенных столбцов для разделения
  2. Изменить по stack для Series с MultiIndex
  3. Создать DataFrame для строк по split с помощью регулярных выражений - необходимо убежать + и для одного или нескольких пробелов используйте \s+
  4. Изменить на stack и unstack для второго уровня в столбцы
  5. Впередзаполните NaN s ffill
  6. Очистка данных reset_index
  7. Если важен порядок столбцов, добавьте reindex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...