pandas - 根据列值复制每行'n'次
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas - 根据列值复制每行'n'次相关的知识,希望对你有一定的参考价值。
我想根据列的值复制或复制DataFrame的行,在本例中为orig_qty
。所以,如果我有一个DataFrame并使用pandas==0.24.2
:
import pandas as pd
d = 'a': ['2019-04-08', 4, 115.00], 'b': ['2019-04-09', 2, 103.00]
df = pd.DataFrame.from_dict(
d,
orient='index',
columns=['date', 'orig_qty', 'price']
)
Input
>>> print(df)
date orig_qty price
a 2019-04-08 4 115.0
b 2019-04-09 2 103.0
所以在上面的例子中,orig_qty=4
的行应该重复4次,而orig_qty=2
的行应该重复2次。在转换之后,我想要一个看起来像这样的DataFrame:
Desired Output
>>> print(new_df)
date orig_qty price fifo_qty
1 2019-04-08 4 115.0 1
2 2019-04-08 4 115.0 1
3 2019-04-08 4 115.0 1
4 2019-04-08 4 115.0 1
5 2019-04-09 2 103.0 1
6 2019-04-09 2 103.0 1
注意转换后我并不关心索引。我可以详细说明这个用例,但基本上我正在做一些FIFO会计,其中orig_qty
值之间可能发生重大变化。
答案
使用Index.repeat
,DataFrame.loc
,DataFrame.assign
和DataFrame.reset_index
new_df = df.loc[df.index.repeat(df['orig_qty'])].assign(fifo_qty=1).reset_index(drop=True)
[输出]
date orig_qty price fifo_qty
0 2019-04-08 4 115.0 1
1 2019-04-08 4 115.0 1
2 2019-04-08 4 115.0 1
3 2019-04-08 4 115.0 1
4 2019-04-09 2 103.0 1
5 2019-04-09 2 103.0 1
另一答案
使用np.repeat
new_df = pd.DataFrame(col: np.repeat(df[col], df.orig_qty) for col in df.columns)
以上是关于pandas - 根据列值复制每行'n'次的主要内容,如果未能解决你的问题,请参考以下文章