Добавить строку N раз в Pandas DF, комбинируя применить и добавить - PullRequest
1 голос
/ 12 апреля 2019

Я получаю следующую ошибку:

  File "/packages/pandas/core/common.py", line 380, in _asarray_tuplesafe
    result[:] = [tuple(x) for x in values]
TypeError: 'numpy.int64' object is not iterable

При работе:

df.apply(lambda row: (df2.append(([row]*(row[6].split(',').__len__())), ignore_index=True)), axis=1)

Цель состоит в том, чтобы применить для каждой строки исходного кадра данных (df) добавление N раз к пустому df (df2). Где N - количество значений, которое имеет конкретное поле row[6].

Пример строки для df:

Id | Список


0 | 126


1 | 126127304305


df2 должно быть:

Id | Список


0 | 126


1 | 126


1 | 127


1 | 304


1 | 305


Как вы можете видеть, я пытался отправить строку в виде списка, но не сработал. Есть идеи?

1 Ответ

1 голос
/ 12 апреля 2019

Вот один способ после split с использованием unnesting

df.List=df.List.str.split(',')
unnesting(df,['List'])
Out[466]: 
  List  Id
0  126   0
1  126   1
1  127   1
1  304   1
1  305   1

def unnesting(df, explode):
    idx = df.index.repeat(df[explode[0]].str.len())
    df1 = pd.concat([
        pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
    df1.index = idx

    return df1.join(df.drop(explode, 1), how='left')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...