我有一只熊猫DataFrame
,有两组'A'
和'B'
,每组中都缺少一个元素。
df4 = pd.DataFrame({'Name' : ['A', 'A', 'A', 'A', 'B', 'B', 'B'],
'X' : [0, 0.5,1, np.nan, 1,np.nan,1]})
Name X
A 0.0
A 0.5
A 1.0
A nan
B 1.0
B nan
B 1.0
我想使用lambda函数为每个组填写缺少的数据
x.mean()
时的正确行为df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.mean()))
0 0.0
1 0.5
2 1.0
3 0.5 <------ Filled as 0.5
4 1.0
5 1.0 <------ Filled as 1
6 1.0
如果我如上所述使用x.mean()
,则此行为是正确的,因为在A组中,平均值为1.5/3
,即0.5
。 B组也是如此。
x.std()
时的奇怪行为但是,如果我改用x.std()
,则填写的数字对我来说没有意义。对于组A,只有三个现有元素0
,0.5
和1.0
,其标准偏差应为0.408
。但是,lambda函数为我提供了以下输出。
df4.groupby('Name')['X'].transform(lambda x: x.fillna(x.std()))
0 0.0
1 0.5
2 1.0
3 0.5 <------ Filled as 0.5 instead of 0.4082
4 1.0
5 0.0 <------ Correct
6 1.0
有人可以解释这种行为吗? 0.5从哪里来?
答案 0 :(得分:3)
需要将pandas.Series.std
#include <iostream>
#include <variant>
struct Visitor{
void operator()(double){ std::cout << "Double!" << std::endl; };
void operator()(int){ std::cout << "Int!" << std::endl; };
// that was missing:
void operator()(std::monostate){ std::cout << "Mono!" << std::endl; };
};
int main() {
std::variant<std::monostate, int, double> v = 1;
std::variant<std::monostate, int, double> w;
std::visit(Visitor{}, v);
std::visit(Visitor{}, w);
}
的默认参数更改为ddof=1
:
ddof=0