【发布时间】:2021-10-12 19:12:16
【问题描述】:
我正在尝试计算一个指示列,以便如果给定客户在给定服务结束日期后 60 天内返回另一项服务,则它返回值 1。下面是数据表和所需的指标列。
我已按客户和服务对数据进行了分类和分组。现在,我正在尝试整理一个公式,该公式查看每一行的结束日期,并检查该给定客户(组)的任何未来服务开始日期是否在 60 天内。
到目前为止,我已经对数据进行了分组,并尝试应用 for 循环......但我不断收到错误消息。我是 Python 新手,所以我不太确定如何设置代码和语法以使其正常工作。任何帮助将不胜感激 - 谢谢!
df = pd.DataFrame({'Customer':['John','John','Deb','Sara','Sara','Sara','Sara','Sara','Mike','Mike','Mike'],
'Service':['A','B','C','A','B','C','D','E','E','F','G'],
'Start':['1/2/2020','3/1/2020','2/5/2020','2/6/2020','3/6/2020','8/2/2020','9/15/2020','10/2/2020','5/4/2020','6/8/2020','7/1/2020'],
'End':['1/3/2020','3/11/2020','2/7/2020','2/9/2020','3/9/2020','8/12/2020','9/19/2020','10/12/2020','5/8/2020','6/18/2020','7/8/2020']})
df['Start'] = pd.to_datetime(df['Start'], infer_datetime_format=True, errors='coerce')
df['End'] = pd.to_datetime(df['End'], infer_datetime_format=True, errors='coerce')
df.dtypes
grp=df.groupby(['Customer','Service'])
grp.head(15)
def serv_days(Start,End):
for row in df.iterrows():
if (row[1].Start == row.End):
continue
if ((row[1].Start-row.End).days < 60):
return 1
else:
return 0
for grpnm,each_grp in grp:
for row in each_grp.iterrows():
print(serv_days(each_grp,row[1].Start,row.loc('End')))
【问题讨论】:
标签: python-3.x for-loop iterator pandas-groupby