дублирование строк данных, а затем добавление ряда дат в новый столбец с pandas - PullRequest
0 голосов
/ 15 января 2020

У меня есть набор данных в следующем формате, однако набор данных намного больше:

import pandas as pd
df1 = pd.DataFrame({'From': ['RU','USA','ME'],
               'To': ['JK', 'JK', 'JK'],
               'Distance':[ 40000,30000,20000],
               'Days': [8,6,4]})

Я хочу добавить диапазон дат для каждого местоположения:

date_rng = pd.date_range(start='01/02/2020', freq='MS', periods=3)

конечный результат должен выглядеть так:

df2 = pd.DataFrame({'Date':['01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020','01/02/2020' , '01/03/2020', '01/04/2020'],
               'From': ['RU', 'RU', 'RU','USA', 'USA', 'USA','ME', 'ME', 'ME'],
               'To': ['JK', 'JK', 'JK','JK', 'JK', 'JK','JK', 'JK', 'JK'],
               'Distance':[ 40000, 40000, 40000,30000, 30000, 30000,20000, 20000, 20000],
               'Days': [8,8,8,6,6,6,4,4,4]})

Ответы [ 2 ]

2 голосов
/ 15 января 2020

Возможно, это будет делать то, что вам нужно:

l = []
for d in date_rng:
    df1['Date'] = d
    l.append(df1.copy())

pd.concat(l)
1 голос
/ 15 января 2020

Это должно помочь:

df1["Date"]=pd.Series({df1.index[0]: date_rng.to_list()})
df1["Date"]=df1["Date"].ffill()
df1=df1.explode("Date")

Вывод:

  From  To  Distance  Days       Date
0   RU  JK     40000     8 2020-02-01
0   RU  JK     40000     8 2020-03-01
0   RU  JK     40000     8 2020-04-01
1  USA  JK     30000     6 2020-02-01
1  USA  JK     30000     6 2020-03-01
1  USA  JK     30000     6 2020-04-01
2   ME  JK     20000     4 2020-02-01
2   ME  JK     20000     4 2020-03-01
2   ME  JK     20000     4 2020-04-01

Ссылка:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html

...