将特定公式应用于熊猫数据框

时间:2021-02-27 17:22:23

标签: 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      0    60.8905   4.0         0.0
2020-03-05     AK      0    81.3548   5.0         0.0

数据框按状态和日期分组。每个州分组中的“平均病例日”是“日”列中的第一天。每个州的第一天是“03-01-2020”。如果该州稍后开始记录(例如:阿拉巴马州于 03-13-2020 开始记录”,这将是“天”列中的第 13 天。我这样做是因为 03-01-2020 是大多数州开始出现病例的时间。至实现上述,我做了以下代码:

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 工作表,其中公式确实有效。提前致谢。

Excel Sheet

0 个答案:

没有答案