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))
这就是你的意思吗?这是否适用于每个分组?