我有一个包含三列的数据框:
order_no product quantity
0 5bf69f 3
0 5beaba 2
1 5bwq21 1
1 5bf69f 1
如果数量值大于1,我想创建行,如下所示:
order_no product quantity
0 5bf69f 1
0 5bf69f 1
0 5bf69f 1
0 5beaba 1
0 5beaba 1
1 5bwq21 1
1 5bf69f 1
答案 0 :(得分:3)
首先是必要的唯一索引值,因此,如有必要:
df = df.reset_index(drop=True)
然后使用quantity
列的Index.repeat
并用DataFrame.loc
扩展行,用DataFrame.assign
将列设置为1
,最后用{{ 3}}:
df = df.loc[df.index.repeat(df['quantity'])].assign(quantity=1).reset_index(drop=True)
print (df)
order_no product quantity
0 0 5bf69f 1
1 0 5bf69f 1
2 0 5bf69f 1
3 0 5beaba 1
4 0 5beaba 1
5 1 5bwq21 1
6 1 5bf69f 1
可以使用numpy.repeat
,但是numpy会将所有数据强制转换为对象,因为string
列:
print (pd.DataFrame(np.repeat(df.values,df.quantity,axis=0)).dtypes)
0 object
1 object
2 object
dtype: object