计算pandas datafram中缺失值的分组数据

2024-09-25 00:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试这样做,但是在更大的数据帧(称为Clean)上:

d={'rx': [1,1,1,1,2.1,2.1,2.1,2.1],
     'vals': [NaN,10,10,20,NaN,10,20,20]}
df=DataFrame(d)


arrays = [df.rx,df.vals]                    
index = pd.MultiIndex.from_arrays(arrays, names = ['rx','vals'])           
df.index = index

Hist=df.groupby(level=('rx','vals'))
Hist.count('vals')

这似乎工作得很好,但当我在Clean dataframe的一个子集上运行相同的概念(用列“LagBin”代替“vals”)时,我会得到一个错误:

^{pr2}$

具体来说历史计数('LagBin')产生值错误:

ValueError: Cannot convert NA to integer

我看了一下数据结构,一切看起来都是一样的。在

以下是产生错误的数据:

rx  LagBin  rx  LagBin
139.1  nan  139.1   
139.1  0    139.1   0
139.1  0    139.1   0
139.1  0    139.1   0
141.1  nan  141.1   
141.1  10   141.1   10
141.1  20   141.1   20
193    nan  193 
193    50   193     50
193    20   193     20
193    3600 193     3600
193    50   193     50
193    0    193     0
193    20   193     20
193    10   193     10
193    110  193     110
193    80   193     80
193    460  193     460
193    30   193     30
193    0    193     0

而最初的工作程序会产生以下结果:

rx  vals    rx  vals
1   nan     1   
1   10      1   10
1   10      1   10 
1   20      1   20
2.1 nan     2.1 
2.1 10      2.1 10
2.1 20      2.1 20
2.1 20      2.1 20

这些产生此错误的数据集有什么不同?在


Tags: 数据cleandataframedfindex错误nanrx
2条回答

这看起来是对的—我一直在修补groupby,并提出了这个解决方案,它看起来更优雅,而且不需要显式地处理na:

df1=DataFrame(data=Clean,columns=('rx','LagBin'))
df1=df1.head(n=20)

df1["rx"].groupby((df1["rx"],df1["LagBin"])).count().reset_index(name="Count")
print(LagCount)

这给了我:

^{pr2}$

我不想为了以后的生活而更容易的保留价值观。在

如果我没弄错你的问题,我相信你想要的是:

Hist.agg(len).dropna()

完整的代码实现如下所示:

^{pr2}$

其中df看起来像:

             rx  vals
rx    vals             
139.1 NaN   139.1   NaN
      0     139.1     0
      0     139.1     0
      0     139.1     0
141.1 NaN   141.1   NaN
      10    141.1    10
      20    141.1    20
193.0 NaN   193.0   NaN
      50    193.0    50
      20    193.0    20
      3600  193.0  3600
      50    193.0    50
      0     193.0     0
      20    193.0    20
      10    193.0    10
      110   193.0   110
      80    193.0    80
      460   193.0   460
      30    193.0    30
      0     193.0     0

Hist.agg(len).dropna()看起来像:

             rx  vals
rx    vals          
139.1 0      3     3
141.1 10     1     1
      20     1     1
193.0 0      2     2
      10     1     1
      20     2     2
      30     1     1
      50     2     2
      80     1     1
      110    1     1
      460    1     1
      3600   1     1

相关问题 更多 >