Дубликат данных, но с увеличением даты - PullRequest
0 голосов
/ 21 мая 2018

У меня есть такой фрейм данных,

    a  b          
0  c1  y 
1  c2  n 
2  c3  n 
3  c4  y 
4  c5  y 

Я хочу создать копию n раз для одного и того же фрейма данных.для этого я использовал pd.concat([df]*3).reset_index(drop=True)

Но теперь у меня есть фрейм данных, как показано ниже:

    a  b          c
0  c1  y 2017-10-10
1  c2  n 2017-10-10
2  c3  n 2017-10-10
3  c4  y 2017-10-10
4  c5  y 2017-10-10

В этом я хочу сделать ту же операцию, но столбец с должен быть добавленкогда-нибудь.то есть

    a  b          c
0  c1  y 2017-10-10
1  c2  n 2017-10-10
2  c3  n 2017-10-10
3  c4  y 2017-10-10
4  c5  y 2017-10-10
0  c1  y 2017-10-11
1  c2  n 2017-10-11
2  c3  n 2017-10-11
3  c4  y 2017-10-11
4  c5  y 2017-10-11
0  c1  y 2017-10-12
1  c2  n 2017-10-12
2  c3  n 2017-10-12
3  c4  y 2017-10-12
4  c5  y 2017-10-12
0  c1  y 2017-10-13
1  c2  n 2017-10-13
2  c3  n 2017-10-13
3  c4  y 2017-10-13
4  c5  y 2017-10-13

Я пытался вот так:

df1=df.copy()
df2=df.copy()
df3=df.copy()
df1['c']=(df['c']+datetime.timedelta(days=1)).copy()
df2['c']=(df['c']+datetime.timedelta(days=2)).copy()
df3['c']=(df['c']+datetime.timedelta(days=3)).copy()
print pd.concat([df,df1,df2,df3])

Мой код работает хорошо, но я ищу эффективный способ решения этой проблемы.

1 Ответ

0 голосов
/ 21 мая 2018

Одним из способов является использование pd.DataFrame.assign в понимании списка:

initial_date = pd.Timestamp('2017-10-10')

# original dataframe already loaded in df
res = pd.concat([df.assign(c=initial_date + pd.Timedelta(days=i)) for i in range(4)])

print(res)

    a  b          c
0  c1  y 2017-10-10
1  c2  n 2017-10-10
2  c3  n 2017-10-10
3  c4  y 2017-10-10
4  c5  y 2017-10-10
0  c1  y 2017-10-11
1  c2  n 2017-10-11
2  c3  n 2017-10-11
3  c4  y 2017-10-11
4  c5  y 2017-10-11
0  c1  y 2017-10-12
1  c2  n 2017-10-12
2  c3  n 2017-10-12
3  c4  y 2017-10-12
4  c5  y 2017-10-12
0  c1  y 2017-10-13
1  c2  n 2017-10-13
2  c3  n 2017-10-13
3  c4  y 2017-10-13
4  c5  y 2017-10-13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...