Выбранные строки для вставки в 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