#python #pandas
#python #pandas
Вопрос:
df = pd.DataFrame([["a", 2], ["b", 3], ["c", 1]], columns=['a', 'count'])
df
a count
0 a 2
1 b 3
2 c 1
этот ввод я хотел бы разнести целое число count на несколько строк по 1.
new_df = pd.DataFrame([], columns=['a', 'count'] )
def s(row):
while row["count"] > 0:
global new_df
a = pd.DataFrame([[row["a"], 1]], columns=["a", "count"])
new_df = new_df.append(a, ignore_index=True)
row["count"] -= 1
df.apply(s, axis=1)
new_df
a count
0 a 1
1 a 1
2 b 1
3 b 1
4 b 1
5 c 1
То, как я это делаю, выглядит плохо и неэффективно. Есть ли более удобный способ?
Ответ №1:
Попробуйте переиндексировать / loc для повторяющегося индекса:
(df.loc[df.index.repeat(df['count'])]
.assign(count=1)
.reset_index(drop=True)
)
Выходной сигнал:
a count
0 a 1
1 a 1
2 b 1
3 b 1
4 b 1
5 c 1