Pandas 仅当存在一定数量的数值时才取平均值
Pandas take mean only if a certain number of numerical values is present
我有一个包含三次值的数据集,如下所示:
ID x y z
A 1 NA NA
A 1 1 0.6
A 1 NA 0.4
B NA NA NA
B NA 0.5 1
B NA 0.5 NA
...
我想对 A 和 B 取一式三份的平均值,但前提是每个列和组有两个或更多数值。所以结果应该是这样的:
ID x y z
A 1 NA 0.5
B NA 0.5 NA
将 mean
与 groupby
结合使用会得到所有列值。如何添加仅在存在一定数量的数值时才计算平均值的免责声明?
我们可以用 sum
做 min_count
,然后用 count
除。 PS:有趣的是我们在 mean
中没有 min_count
s=df.groupby('ID').sum(min_count=2)/df.groupby('ID').count()
Out[178]:
x y z
ID
A 1.0 NaN 0.5
B NaN 0.5 NaN
这是另一个可能有用的解决方案:
我有一个包含三次值的数据集,如下所示:
ID x y z
A 1 NA NA
A 1 1 0.6
A 1 NA 0.4
B NA NA NA
B NA 0.5 1
B NA 0.5 NA
...
我想对 A 和 B 取一式三份的平均值,但前提是每个列和组有两个或更多数值。所以结果应该是这样的:
ID x y z
A 1 NA 0.5
B NA 0.5 NA
将 mean
与 groupby
结合使用会得到所有列值。如何添加仅在存在一定数量的数值时才计算平均值的免责声明?
我们可以用 sum
做 min_count
,然后用 count
除。 PS:有趣的是我们在 mean
min_count
s=df.groupby('ID').sum(min_count=2)/df.groupby('ID').count()
Out[178]:
x y z
ID
A 1.0 NaN 0.5
B NaN 0.5 NaN
这是另一个可能有用的解决方案: