Преобразование данных в день для каждого диапазона дат, указанного в строке данных

У меня была аналогичная проблема, но, используя SSH-ключи. Из ответа Тупи, выше, я понял, что проблема заключается в том, что файл known_hosts не присутствует или github.com не присутствует в списке известных хостов. Вот шаги, которые я выполнил для его устранения -

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. Добавьте ключ id_rsa.pub в список ключей SSH в вашем профиле GitHub.
1
задан Ghanshyam Savaliya 11 March 2019 в 13:53
поделиться

1 ответ

Вы можете использовать списки со сглаживанием для новых DataFrame и затем DataFrame.merge вместе с исходными данными:

data1 = pd.DataFrame({'Event Start':['03/28/2018','04/02/2018'],
                      'Event End':['04/03/2018','04/05/2018'],
                      'Team 1':['AAB','AAC'],
                      'Team 2':['BBB','ABC'],
                      'Total Spot':[160, 350]})

c = ['Event Start','Event End']
data1[c] = data1[c].apply(pd.to_datetime)

data1['Daily']=(data1['Total Spot']/((data1['Event End']-data1['Event Start']).dt.days)+1)
print (data1)
  Event Start  Event End Team 1 Team 2  Total Spot       Daily
0  2018-03-28 2018-04-03    AAB    BBB         160   27.666667
1  2018-04-02 2018-04-05    AAC    ABC         350  117.666667

L = [(i, x) for i, s, e in zip(data1.index, data1['Event Start'], data1['Event End']) 
            for x in pd.date_range(s, e)]

df = (pd.DataFrame(L, columns=['idx','Day'])
        .merge(data1.drop(c + ['Total Spot'], axis=1), left_on='idx', right_index=True)
        .drop('idx', axis=1))

print (df)
          Day Team 1 Team 2       Daily
0  2018-03-28    AAB    BBB   27.666667
1  2018-03-29    AAB    BBB   27.666667
2  2018-03-30    AAB    BBB   27.666667
3  2018-03-31    AAB    BBB   27.666667
4  2018-04-01    AAB    BBB   27.666667
5  2018-04-02    AAB    BBB   27.666667
6  2018-04-03    AAB    BBB   27.666667
7  2018-04-02    AAC    ABC  117.666667
8  2018-04-03    AAC    ABC  117.666667
9  2018-04-04    AAC    ABC  117.666667
10 2018-04-05    AAC    ABC  117.666667

Другое подобное решение:

zipped = zip(data1['Team 1'], data1['Team 2'], 
             data1['Daily'], data1['Event Start'], data1['Event End'])
L = [(x, t1, t2, d) for t1, t2, d, s, e in zipped for x in pd.date_range(s, e)]
print (L)

df = pd.DataFrame(L, columns=['Day', 'Team 1','Team 2','Daily'])
print (df)
          Day Team 1 Team 2       Daily
0  2018-03-28    AAB    BBB   27.666667
1  2018-03-29    AAB    BBB   27.666667
2  2018-03-30    AAB    BBB   27.666667
3  2018-03-31    AAB    BBB   27.666667
4  2018-04-01    AAB    BBB   27.666667
5  2018-04-02    AAB    BBB   27.666667
6  2018-04-03    AAB    BBB   27.666667
7  2018-04-02    AAC    ABC  117.666667
8  2018-04-03    AAC    ABC  117.666667
9  2018-04-04    AAC    ABC  117.666667
10 2018-04-05    AAC    ABC  117.666667
0
ответ дан jezrael 11 March 2019 в 13:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: