根据其他列的值创建 Pandas 数据帧行

3

我有一个数据框,其中包含三列:

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个回答

3

首先必须有唯一索引值,因此如果需要:

df = df.reset_index(drop=True)

接下来使用通过列quantityIndex.repeat 并通过DataFrame.loc扩展行,通过 DataFrame.assign将列设置为1,最后再通过DataFrame.reset_index创建唯一索引:

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,但是由于string列,numpy会将所有数据转换为对象。

print (pd.DataFrame(np.repeat(df.values,df.quantity,axis=0)).dtypes)
0    object
1    object
2    object
dtype: object

2
@anky_91 - 如果不同的列类型被Numpy设置为字符串,那么就会出现问题。 - jezrael
我看到了,已经记下了。:) 谢谢。 - anky
我遇到了错误:TypeError: Cannot cast array data from dtype('O') to dtype('int64') according to the rule 'safe'。 - sourav khanna
@souravkhanna - print (df.dtypes) 是什么? - jezrael
@souravkhanna - 在我提供的解决方案之前,你的第一步是通过 df['quantity'] = df['quantity'].astype(int) 将列转换为整数。 - jezrael
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接