повторение строк фрейма данных - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь повторить строки кадра данных.Вот мои исходные данные:

pd.DataFrame([
        {'col1': 1, 'col2': 11, 'col3': [1, 2] },
        {'col1': 2, 'col2': 22, 'col3': [1, 2, 3] },
        {'col1': 3, 'col2': 33, 'col3': [1] },
        {'col1': 4, 'col2': 44, 'col3': [1, 2, 3, 4] },
    ])

, что дает мне

   col1  col2          col3
0     1    11        [1, 2]
1     2    22     [1, 2, 3]
2     3    33           [1]
3     4    44  [1, 2, 3, 4]

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

   col1  col2
0     1    11
1     1    11
2     2    22
3     2    22
4     2    22
5     3    33
6     4    44
7     4    44
8     4    44
9     4    44

Какой хороший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы также можете использовать reindex и index.repeat

df = df.reindex(df.index.repeat(df.col3.apply(len)))

df = df.reset_index(drop=True).drop("col3", axis=1)
# To reset index and drop col3 

# Output:

   col1  col2
0   1     11
1   1     11
2   2     22
3   2     22
4   2     22
5   3     33
6   4     44
7   4     44
8   4     44
9   4     44
0 голосов
/ 16 сентября 2018

Вы можете использовать понимание списка вместе с zip.

>>> pd.DataFrame([row for row, count in zip(df[['col1', 'col2']].values, df['col3']) 
                  for _ in range(len(count))], columns=df.columns[:2])
   col1  col2
0     1    11
1     1    11
2     2    22
3     2    22
4     2    22
5     3    33
6     4    44
7     4    44
8     4    44
9     4    44
...