Выбранные строки для вставки в dataframe-pandas

Как можно вставить строки в кадр данных pandas? У меня большой фрейм данных, и я пытаюсь определить конкретные значения для повторения строк и вставки в фрейм данных. Например:

df1 = pd.DataFrame([[1, 2], [3, 4],[1, 6],[2,3],[1,5]], columns=["a", "b"])
   a  b
0  1  2
1  3  4
2  1  6
3  2  3
4  1  5

Столбец "а" представляет количество повторений строк для вставки в фрейм данных, поэтому я хотел бы получить следующее

   a  b
0  1  2
1  1  4
2  1  4
3  1  4
4  1  6
5  1  3
6  1  3
7  1  5

Я пытался использовать append, но результаты оказались не такими, как я ожидал. Вот что у меня так далеко. Я буду признателен за любое понимание.

df2 = df1[df1.a > 1]               # To select rows with values more than 1
repeats = (df2.iloc[0]["a"] - 1)   # number of repetitions -1
r2 = pd.concat([df2]*repeats, ignore_index=True)
df_modified = df1.append(r2, ignore_index=True)

3 ответа

Решение

С помощью reindex с repeat

df1.reindex(df1.index.repeat(df1.a)).assign(a=1).reset_index(drop=True)
Out[1266]: 
   a  b
0  1  2
1  1  4
2  1  4
3  1  4
4  1  6
5  1  3
6  1  3
7  1  5

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

df2 = pd.DataFrame({
    'a': 1, 
    'b': [b for a, b in df1[['a', 'b']].values for _ in range(a)]})

>>> df2
   a  b
0  1  2
1  1  4
2  1  4
3  1  4
4  1  6
5  1  3
6  1  3
7  1  5

Ты можешь использовать numpy.repeat:

import numpy as np

res = pd.DataFrame({'a': 1, 'b': np.repeat(df1['b'].values, df1['a'].values)})

print(res)

   a  b
0  1  2
1  1  4
2  1  4
3  1  4
4  1  6
5  1  3
6  1  3
7  1  5
Другие вопросы по тегам