自由度的默認選項ddof中的np.stdIS ddof=0。
使用np.stdinside 時pd.DataFrame.transform,此行為會發生變化:
import numpy as np
import pandas as pd
df = pd.DataFrame({"col1": [1, 2, 3, 4, 5, 9],
"group": ["a", "a", "a", "b", "b", "b"]})
std = df.groupby("group")["col1"].transform(np.std)
輸出是
0 1.000000
1 1.000000
2 1.000000
3 2.645751
4 2.645751
5 2.645751
Name: col1, dtype: float64
同時,np.std([1, 2, 3]) = 0.816496580927726和np.std([1, 2, 3], ddof=1) = 1.0。
好像有一個不同的std()或使用的,當使用不同的選項pd.DataFrame.transform。
如何解決這個問題?
uj5u.com熱心網友回復:
簡單的解決方法是將 加入ddof=0到pd.DataFrame.transform選項中:
import numpy as np
import pandas as pd
df = pd.DataFrame({"col1": [1, 2, 3, 4, 5, 9],
"group": ["a", "a", "a", "b", "b", "b"]})
std = df.groupby("group")["col1"].transform(np.std, ddof=0) # <- fix
然后輸出是:
0 0.816497
1 0.816497
2 0.816497
3 2.160247
4 2.160247
5 2.160247
Name: col1, dtype: float64
請參閱此處的類似答案pd.DataFrame.apply:pd.apply和Pandas agg 函式中的不同 np.std 行為為 numpy std 與 nanstd 提供不同的結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368021.html
