Python 将特定公式应用于数据帧

Python 将特定公式应用于数据帧,python,excel,pandas,dataframe,Python,Excel,Pandas,Dataframe,数据帧如下所示 date state Deaths Cases Day Avg day of case 2020-03-01 AK 0 15.5000 1.0 1.0 2020-03-02 AK 0 28.4048 2.0 0.0 2020-03-03 AK 0 43.8333 3.0 0.0 2020-03-04 AK

数据帧如下所示

   date       state Deaths   Cases    Day      Avg day of case
2020-03-01     AK      0    15.5000   1.0         1.0
2020-03-02     AK      0    28.4048   2.0         0.0
2020-03-03     AK      0    43.8333   3.0         0.0
2020-03-04     AK      0    60.8905   4.0         0.0
2020-03-05     AK      0    81.3548   5.0         0.0
数据帧按状态和日期分组。每个州分组的“平均病例日”是“日”列中的第一天。每个州的第一天是“03-01-2020”。如果该州后来开始记录(例如:阿拉巴马州于2020年3月13日开始记录),这将是“日期”栏中的第13天。我这样做是因为2020年3月1日是大多数州开始有病例的时候。为了实现上述目标,我编写了以下代码:

df['date'] = pd.to_datetime(df['date'])
df = df.dropna()
df = df[df['date'] >= '03-01-2020']

# getting the day column
df['Day'] = df.groupby('state')['date'].rank(ascending=True)

#creating the avg day of case
df['Avg day of case'] = 0 

#getting the first day to be the first day of the Avg day of case
df.loc[df.groupby('state')['date'].head(1).index, 'Avg day of case'] = df.loc[:,'Day']
这一切都很好。现在是最难的部分。为了完成“病例的平均日”,我想应用以下公式,计算每天和病例的平均日数,计算出病例的平均日数

for i in range(1, len(df)):
  x = (((df.loc[i, 'Cases'] - df.loc[i-1, 'Cases']) * (df.loc[i, 'Day']- df.loc[i-1, 'Avg day of 
  case'])) / (df.loc[i, 'Cases'])) + (df.loc[i-1, 'Avg day of case'])
  df.loc[i, 'Avg day of case'] = round(x, 2)
然而,当我这样做的时候,我总是

关键错误:0

上述异常是以下异常的直接原因:

但我不太明白为什么。我对日期进行了排序,并按州进行了分组。之后,我应用了代码,将每个州分组的第一个值作为案例的第一天。这应该可以解决除以零的问题。我做错了什么

下面是一个excel表格示例,公式在其中起作用。请提前感谢


您可以使用,而不是使用
iloc
,例如
df['cases']-df[cases'].shift(句点=1)
df['Avg case']=((df['cases']-df['cases'].shift(句点=1))/(df['cases'])+(df['Avg case'].shift(句点=1))
这就是你的意思吗?这是否适用于每个分组?