Pandas Dataframe 行值等于上面的值 + 1
Pandas Dataframe row value equals value above + 1
我有一个包含每年第一周的数据框。我正在尝试获取周数列表。
所以基本上我需要用上面的数字 (1) + 1 填充 na。
到目前为止,这是我的代码
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
,然后使用 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
我有一个包含每年第一周的数据框。我正在尝试获取周数列表。
所以基本上我需要用上面的数字 (1) + 1 填充 na。
到目前为止,这是我的代码
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
,然后使用 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