python - 如何将数据框日期与保持工作日和假期分开的行和列的值进行比较
问题描述
我有一个代表这个的数据框:
我需要创建另一列'Mark'
,这就是它复杂的原因。对于价值'C'
执行日是Sunday 8/11/2018
。第二天将是Monday 9/11/2018
。所以我需要weekdays
计算previous week
. 对于这种情况,我需要计算1/11/2018
、2/11/2018
、和。3/11/2018
4/11/2018
5/11/2018
但是,如果next day
ofexecution day
是Friday
或者Saturday
我需要采用前一周的值'Friday'
和'Saturday'
. 例如,B
在Thursday 12/11/2018'
. 后天是“星期五”。所以我需要计算前一周的平均值,Friday
哪些Saturday
是6/11/2018
和7/11/2018
最初我没有Day
专栏,我通过使用添加了后记
df['Execution']=pd.to_datetime(df['Execution'])
df['Day']=df['Execution'].dt.weekday_name
如果execution date
与column dates
. 这是代码-
for j,row in df.iterrows():
x=str(row['Execution'])
x=x[slicing]
for i, val in enumerate (df.columns.values):
print(df.columns[i])
if i<l1:
val=str(val)
val=val[slicing]
if x==val: #Execution date matches column date
print('yay')
我正在尝试自己学习 python,我从学习开始pandas dataframe
。
但是,现在我迷路了,无法弄清楚继续进行的逻辑。任何人都可以启发我的方式吗?
解决方案
这是对我有用的代码和解释:
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
推荐阅读
- arrays - 如何在 Oracle 数据库表中存储数组?
- c++ - Arduino IC22显示倒数计时器未从两位数转换为一位数
- python - 使用子测试区分测试迭代的 pytest 等效项是什么
- reactjs - 导航到动态文件时,NextJS 在按钮单击时重新加载 SPA
- php - 将数据写入 memcached 几毫秒
- python - 我需要获取 pandas-dataframe 行,其中包括列中特定列表位置的特定值
- python - 用于任务管道的 Python 模式
- python - PlotlyRequestError:未提供身份验证凭据 python
- angular - 如何精确匹配 Angular 材料表中选择的过滤器字符串数据?
- java - 出现错误后 Spring Boot 应用程序未运行 原因:java.lang.NoClassDefFoundError: org/eclipse/jetty/server/RequestLog$Writer