根据其他列值创建Pandas Dataframe行

时间:2019-03-05 06:59:51

标签: python pandas

我有一个包含三列的数据框:

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

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