pandas - копирует каждую строку n раз в зависимости от значения столбца - PullRequest
2 голосов
/ 08 апреля 2019

Я хотел бы скопировать или продублировать строки 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, который выглядит следующим образом:

Желаемый вывод

>>> 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 ]

6 голосов
/ 08 апреля 2019

Использование 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
2 голосов
/ 08 апреля 2019

Использование np.repeat

new_df = pd.DataFrame({col: np.repeat(df[col], df.orig_qty) for col in df.columns})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...