Разнесите строки на основе целого числа в pandas

#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