Pandas 的缺失数据计数
Missing data count with Pandas
我有一个带有 TimeSeries 的 pandas.DataFrame
(所有列都转换为 float
),它使用 DatetimeIndex(granularity/frequency 大约 1 小时)为行和 MultiIndex 建立索引列。系列中有缺失数据(但没有缺失行,频率已设置)。我想按月计算获取性能(百分比)。
def mapMonth(x):
return x.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
c = data.groupby(mapMonth).count()
上面的代码似乎计算忽略 NaN
的值,这正是我想要的。现在我想将这个聚合的 DataFrame 除以预期的计数。
n = pd.DataFrame(np.full((data.shape[0],), 1, dtype=float), index=data.index).groupby(groupby.mapMonth).sum()
它按月给我预期的数据计数,但我发现这种方式非常棘手。
无论如何,我无法成功地将 DataFrame c
除以 n
使用:
p = c.div(n, axis=0)
DataFrame 看起来像:
networkkey RTU
measurandkey NO2
sitekey 41B001 41B004 41B006 41B008 41B011 41MEU1 41N043 41R001 41R002
channelid 280 27 38 55 59 86 103 122 168
2012-01-01 0 728 728 0 728 732 728 728 728
2012-02-01 0 679 678 0 680 686 681 681 679
2012-03-01 0 728 727 0 727 720 726 728 722
2012-04-01 0 705 698 0 702 710 699 705 701
2012-05-01 0 728 728 0 726 728 725 724 680
2012-06-01 0 703 700 0 701 710 705 705 705
2012-07-01 0 728 728 0 728 657 707 728 728
0
2012-01-01 744.0
2012-02-01 696.0
2012-03-01 744.0
2012-04-01 720.0
2012-05-01 744.0
2012-06-01 720.0
2012-07-01 744.0
2012-08-01 744.0
2012-09-01 720.0
2012-10-01 744.0
2012-11-01 720.0
2012-12-01 744.0
我怀疑问题出在 MultiIndex
。无论如何,我觉得这个方法并不简单。
是否有 cleaner/cleaver 用 Pandas 计算此聚合的内容?
终于找到了不忽略NaN
的size
函数。因此,以下代码在几行中执行我想要的:
# Group Data:
g = data.groupby(groupby.mapMonth)
# Compute Performance
c = g.count()
n = g.size()
d = c.div(n, axis=0)
我有一个带有 TimeSeries 的 pandas.DataFrame
(所有列都转换为 float
),它使用 DatetimeIndex(granularity/frequency 大约 1 小时)为行和 MultiIndex 建立索引列。系列中有缺失数据(但没有缺失行,频率已设置)。我想按月计算获取性能(百分比)。
def mapMonth(x):
return x.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
c = data.groupby(mapMonth).count()
上面的代码似乎计算忽略 NaN
的值,这正是我想要的。现在我想将这个聚合的 DataFrame 除以预期的计数。
n = pd.DataFrame(np.full((data.shape[0],), 1, dtype=float), index=data.index).groupby(groupby.mapMonth).sum()
它按月给我预期的数据计数,但我发现这种方式非常棘手。
无论如何,我无法成功地将 DataFrame c
除以 n
使用:
p = c.div(n, axis=0)
DataFrame 看起来像:
networkkey RTU
measurandkey NO2
sitekey 41B001 41B004 41B006 41B008 41B011 41MEU1 41N043 41R001 41R002
channelid 280 27 38 55 59 86 103 122 168
2012-01-01 0 728 728 0 728 732 728 728 728
2012-02-01 0 679 678 0 680 686 681 681 679
2012-03-01 0 728 727 0 727 720 726 728 722
2012-04-01 0 705 698 0 702 710 699 705 701
2012-05-01 0 728 728 0 726 728 725 724 680
2012-06-01 0 703 700 0 701 710 705 705 705
2012-07-01 0 728 728 0 728 657 707 728 728
0
2012-01-01 744.0
2012-02-01 696.0
2012-03-01 744.0
2012-04-01 720.0
2012-05-01 744.0
2012-06-01 720.0
2012-07-01 744.0
2012-08-01 744.0
2012-09-01 720.0
2012-10-01 744.0
2012-11-01 720.0
2012-12-01 744.0
我怀疑问题出在 MultiIndex
。无论如何,我觉得这个方法并不简单。
是否有 cleaner/cleaver 用 Pandas 计算此聚合的内容?
终于找到了不忽略NaN
的size
函数。因此,以下代码在几行中执行我想要的:
# Group Data:
g = data.groupby(groupby.mapMonth)
# Compute Performance
c = g.count()
n = g.size()
d = c.div(n, axis=0)