熊猫-根据列值复制每行n次

Sco*_*les 2 python dataframe pandas

在这种情况下,我想基于列的值复制或复制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']
    )
Run Code Online (Sandbox Code Playgroud)

输入项

>>> print(df)
         date  orig_qty   price
a  2019-04-08         4   115.0
b  2019-04-09         2   103.0
Run Code Online (Sandbox Code Playgroud)

因此,在上面的示例中,with的行orig_qty=4应重复4次,而with的行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
Run Code Online (Sandbox Code Playgroud)

注意,我并不真正关心转换后的索引。我可以详细说明用例,但实际上我正在做一些FIFO记帐,其中的值之间可能发生重要变化orig_qty

Chr*_*s A 6

使用Index.repeatDataFrame.locDataFrame.assignDataFrame.reset_index

 new_df = df.loc[df.index.repeat(df['orig_qty'])].assign(fifo_qty=1).reset_index(drop=True)
Run Code Online (Sandbox Code Playgroud)

[输出]

         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
Run Code Online (Sandbox Code Playgroud)

  • @RafaelC谢谢。你也是+1 (2认同)