我有一个表示这个的数据框:
我需要创建另一列'Mark'
,这就是为什么它很复杂的原因。
对于值'C'
,执行日为Sunday 8/11/2018
。第二天是Monday 9/11/2018
。
因此,我需要计算weekdays
的{{1}}值。对于这种情况,我需要计算previous week
,1/11/2018
,2/11/2018
,3/11/2018
和4/11/2018
。
但是,如果5/11/2018
的{{1}}是next day
或execution day
,则需要取上一周的值Friday
和{{1 }}。例如,Saturday
在'Friday'
上执行。第二天是“星期五”。因此,我需要计算前一周'Saturday'
和B
和Thursday 12/11/2018'
最初我没有Friday
列,我使用来添加后缀
Saturday
如果6/11/2018
与7/11/2018
之一匹配,我就可以打印出一些东西。这是代码-
Day
我正在尝试自己学习python,并且已经开始学习df['Execution']=pd.to_datetime(df['Execution'])
df['Day']=df['Execution'].dt.weekday_name
。
但是,现在我迷路了,无法弄清楚继续进行的逻辑。有人可以启发我吗?
答案 0 :(得分:0)
以下是对我有用的代码,并带有解释:
for i,row in df.iterrows():
for j, val in enumerate (range(0,l1-1)): #l1 is the number of columns
#subtracted 1 to not take last column in account as I only need the dates
if df.columns[j+1]==row['Execution']: #to match the date of column execution,with the column dates
a=pd.to_datetime(df.columns[j+1+1])
a=a.day_name() #to convert the date in to weekday name
#As for friday I would need previous week's friday and saturday values.
#Therefore, I subtracted 7 and 8 to get the required value. For all the other days I calculated carefully this way so that I get the days right.
if (a=='Friday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)])/2
#df.iloc(row,column) was used to get the values right
markList.append(mark)
elif (a=='Saturday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-8)])/2
markList.append(mark)
elif (a=='Sunday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+MPDr.iloc[i,(j+1+1-4)]+df.iloc[i,(j+1+1-3)])/5
markList.append(mark)
elif (a=='Monday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+df.iloc[i,(j+1+1-4)]+df.iloc[i,(j+1+1-8)])/5
markList.append(mark)
elif (a=='Tuesday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)])/5
markList.append(mark)
elif (a=='Wednesday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)]+df.iloc[i,(j+1+1-10)])/5
markList.append(mark)
elif (a=='Thursday'):
mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)]+df.iloc[i,(j+1+1-10)]+df.iloc[i,(j+1+1-11)])/5
markList.append(mark)
df['mark']=markList #To add at the end of the dataframe