Конвертируйте строку различных элементов в панде с кадрами в категориальный счет - PullRequest
0 голосов
/ 13 октября 2018

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

                   items
    0                abc
    1  efg x 2, abc, def
    2            abc x 2
    3   efg x 3, def x 7
    4            abc x 5

Я хочу извлечьпредметы как отдельные компоненты и соотносят их количество:

         abc    def    efg
    0      1      0      0
    1      1      1      2
    2      2      0      0
    3      0      7      3
    4      5      0      0

Что я пробовал до сих пор;из Панды разделить Столбец на несколько столбцов запятыми

pd.concat([df, df[1].str.split(',', expand=True)], axis=1)

Это дает

                   items         0         1         2
    0                abc        abc      None      None
    1  efg x 2, abc, def    efg x 2       abc       def
    2            abc x 2    abc x 2      None      None
    3   efg x 3, def x 7    efg x 3   def x 7      None
    4            abc x 5    abc x 5      None      None  

Я понятия не имею, как поступить: / и застрял на этомнесколько дней.Будем очень благодарны за любые предложения, даже если конечный продукт не тот, о котором я просил.

1 Ответ

0 голосов
/ 13 октября 2018

Как насчет следующего:

def extract_components(s):
    components = {}
    for sub in s.split(','):
        if 'x' in sub:
            prod, count = sub.split('x')
            components[prod.strip()] = int(count)
        else:
            components[sub.strip()] = 1

    return components

print(df['items'].apply(extract_components).apply(pd.Series).fillna(0))

  abc efg def
0   1   0   0
1   1   2   1
2   2   0   0
3   0   3   7
4   5   0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...