我想基于列的值(在这种情况下为orig_qty
)复制或复制DataFrame的行。因此,如果我有一个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']
)
>>> 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:
>>> 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
的值之间可能发生重要变化。
答案 0 :(得分:5)
使用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
答案 1 :(得分:2)
使用np.repeat
new_df = pd.DataFrame({col: np.repeat(df[col], df.orig_qty) for col in df.columns})