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

时间:2019-04-08 15:59:18

标签: python pandas dataframe

我想基于列的值(在这种情况下为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的值之间可能发生重要变化。

2 个答案:

答案 0 :(得分:5)

使用Index.repeatDataFrame.locDataFrame.assignDataFrame.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})
相关问题