首页 > 解决方案 > DataFrame 行为异常?

问题描述

我在这里发疯,试图理解为什么这段代码给了我不同的结果......即使我输入(我认为)相同的数字,平均值计算也不同?

max_underlag = 0.0
df.loc[df.Gräskvot < 1-max_underlag, 'Gräskvot'] = 1-max_underlag
df.loc[df.Gräskvot > 1+max_underlag, 'Gräskvot'] = 1+max_underlag
df.loc[df.Plastkvot < 1-max_underlag, 'Plastkvot'] = 1-max_underlag
df.loc[df.Plastkvot > 1+max_underlag, 'Plastkvot'] = 1+max_underlag

print(df.loc[:, ("mp_h", "mp_b", "Gräskvot", "Plastkvot")].tail())

#df.mp_h = (df.mp_h / df.Plastkvot).where((df.Underlag == "Plast"), df.mp_h / df.Gräskvot)
#df.mp_b = (df.mp_b * df.Plastkvot).where((df.Underlag == "Plast"), df.mp_b * df.Gräskvot)

print("\n",df.loc[:, ("mp_h", "mp_b", "Gräskvot", "Plastkvot")].tail())

df["mp_snitt_h_framåt"]     = round(df.groupby(['Hemmalag'])['mp_h'].transform(lambda x: x.expanding().mean().shift()), 2)
df["mp_snitt_h_bakåt"]      = round(df.groupby(['Hemmalag'])['mp_b'].transform(lambda x: x.expanding().mean().shift()), 2)

print("\n",df.loc[:, ("mp_snitt_h_framåt", "mp_snitt_h_bakåt")].tail())

代码给了我这个结果:

 mp_h  mp_b  Gräskvot  Plastkvot
777  0.68  0.66       1.0        1.0
778  0.87  1.13       1.0        1.0
779  2.40  2.40       1.0        1.0
780   NaN   NaN       1.0        1.0
781  1.12  0.88       1.0        1.0

  mp_h  mp_b  Gräskvot  Plastkvot
777  0.68  0.66       1.0        1.0
778  0.87  1.13       1.0        1.0
779  2.40  2.40       1.0        1.0
780   NaN   NaN       1.0        1.0
781  1.12  0.88       1.0        1.0

  mp_snitt_h_framåt  mp_snitt_h_bakåt
777               1.79              1.42
778               1.34              1.34
779               1.59              1.80
780               1.61              1.54
781               1.41              1.72

当我删除 #:si 时应该得到相同的结果,因为“GRäskvot”和“Plastkvot”设置为 1,因此不会更改“mp_h”或“mp_b”。

 mp_h  mp_b  Gräskvot  Plastkvot
777  0.68  0.66       1.0        1.0
778  0.87  1.13       1.0        1.0
779  2.40  2.40       1.0        1.0
780   NaN   NaN       1.0        1.0
781  1.12  0.88       1.0        1.0

  mp_h  mp_b  Gräskvot  Plastkvot
777  0.68  0.66       1.0        1.0
778  0.87  1.13       1.0        1.0
779  2.40  2.40       1.0        1.0
780   NaN   NaN       1.0        1.0
781  1.12  0.88       1.0        1.0

  mp_snitt_h_framåt  mp_snitt_h_bakåt
777               1.79              1.37
778               1.32              1.31
779               1.53              1.83
780               1.60              1.61
781               1.31              1.70

既然 mp_h 和 mp_b 相同,那么“mp_snitt_h_framåt”和“mp_snitt_h_bakåt”怎么会不同呢?我想我在这里遗漏了一些基本的东西。

标签: python

解决方案


问题解决了。我在“Gräskvot”和“Plastkvot”中有一堆 NaN,当然在“mp_h”和“mp_b”中创建了一堆 NaN

一个让我很头疼的愚蠢错误……抱歉浪费了您的时间!


推荐阅读