Значение строки Pandas Dataframe равно значению выше +1 - PullRequest
0 голосов
/ 22 октября 2018

У меня есть датафрейм с первой недели каждого года.Я пытаюсь получить список номеров недели.

Так что, по сути, мне нужно заполнить числа с цифрами выше (1) + 1.

Вот мой код пока

FirstDay= {'Date':
           { 'Wk117' :'01-07-2016'
            ,'Wk118':'30-06-2017'
            ,'Wk119':'29-06-2018'
            ,'Wk120':'28-06-2019'


   }}

FirstDay=pd.DataFrame(FirstDay).reset_index()
#
FirstDay['Date'] = pd.to_datetime(FirstDay["Date"],dayfirst=True)
FirstDay['value']=int(1)

FirstDay=FirstDay.set_index('Date')
FirstDay=FirstDay.resample('W-FRI').mean()
FirstDay=FirstDay.fillna(0)

#FirstDay['value']=FirstDay['value'].astype(int)



for index, row in FirstDay.iterrows():
     if row['value']!=float(1):
        offset=row-1
        row['value']=offset['value']+1

Кто-нибудь видит, почему это не работает?

Большое спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Я считаю, что вам нужно заменить отсутствующие значения на 1, а затем использовать cumsum:

FirstDay=FirstDay.set_index('Date')
FirstDay=FirstDay.resample('W-FRI').mean()
FirstDay=FirstDay.fillna(1).cumsum().astype(int)
print (FirstDay.head(10))
            value
Date             
2016-07-01      1
2016-07-08      2
2016-07-15      3
2016-07-22      4
2016-07-29      5
2016-08-05      6
2016-08-12      7
2016-08-19      8
2016-08-26      9
2016-09-02     10

Если необходимо сбросить счетчик для каждого года:

FirstDay['value'] = FirstDay.groupby(FirstDay['value'].fillna(0).cumsum()).cumcount().add(1)
print (FirstDay.head(10))
            value
Date             
2016-07-01      1
2016-07-08      2
2016-07-15      3
2016-07-22      4
2016-07-29      5
2016-08-05      6
2016-08-12      7
2016-08-19      8
2016-08-26      9
2016-09-02     10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...