DataFrame行为异常?

时间:2019-05-12 11:22:26

标签: python

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

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

当我删除#:s时,应该会得到相同的结果,因为“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”有何不同?我想我这里缺少基本的东西。

1 个答案:

答案 0 :(得分:0)

问题解决了。我在“Gräskvot”和“ Plastkvot”中使用了NaN,当然在“ mp_h”和“ mp_b”中创建了许多NaN。

一个愚蠢的错误使我头痛不已...对不起,浪费您的时间!