Python pandas - 构建多元数据透视表以显示 NaN 和非 NaN 的计数

标签 python pandas dataframe pivot-table nan

我有一个基于不同气象站的多个变量(温度、压力等)的数据集,

stationID | Time | Temperature | Pressure |...
----------+------+-------------+----------+
123       |  1   |     30      |  1010.5  |   
123       |  2   |     31      |  1009.0  |
202       |  1   |     24      |  NaN     |
202       |  2   |     24.3    |  NaN     |
202       |  3   |     NaN     |  1000.3  |
...

我想创建一个数据透视表来显示每个气象站的 NaN 和非 NaN 数量,这样:

stationID | nanStatus | Temperature | Pressure |...
----------+-----------+-------------+----------+
123       |  NaN      |      0      |     0    |       
          |  nonNaN   |      2      |     2    |
202       |  NaN      |      1      |     2    |
          |  nonNaN   |      2      |     1    |
...

下面我展示了我到目前为止所做的工作,这些工作(以一种繁琐的方式)适用于温度。但是,如何才能使两个变量相同,如上所示?

import pandas as pd
import bumpy as np
df = pd.DataFrame({'stationID':[123,123,202,202,202], 'Time':[1,2,1,2,3],'Temperature':[30,31,24,24.3,np.nan],'Pressure':[1010.5,1009.0,np.nan,np.nan,1000.3]})

dfnull = df.isnull()
dfnull['stationID'] = df['stationID']
dfnull['tempValue'] = df['Temperature']
dfnull.pivot_table(values=["tempValue"], index=["stationID","Temperature"], aggfunc=len,fill_value=0)

输出是:

----------------------------------
                         tempValue
stationID | Temperature           
123       | False                2
202       | False                2
          | True                 1

最佳答案

更新:感谢 @root :

In [16]: df.groupby('stationID')[['Temperature','Pressure']].agg([nans, notnans]).astype(int).stack(level=1)
Out[16]:
                   Temperature  Pressure
stationID
123       nans               0         0
          notnans            2         2
202       nans               1         2
          notnans            2         1

原答案:

In [12]: %paste
def nans(s):
    return s.isnull().sum()

def notnans(s):
    return s.notnull().sum()
## -- End pasted text --

In [37]: df.groupby('stationID')[['Temperature','Pressure']].agg([nans, notnans]).astype(np.int8)
Out[37]:
          Temperature         Pressure
                 nans notnans     nans notnans
stationID
123                 0       2        0       2
202                 1       2        2       1

关于Python pandas - 构建多元数据透视表以显示 NaN 和非 NaN 的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38595578/

相关文章:

apache-spark - 从列表的 RDD 创建 Spark DataFrame

python - 打印单引号在 .txt 文件中变成奇怪的字符

Python ZIP 函数给出了意外的输出

python - 如何单击 SVG 元素?

python - Python远程查询sas7bdat文件的方法

python - 无法使用 seaborn barplot 绘制数据框

python - 将 0 替换为数据框 Python Pandas 中的空白

python - 如何通过条件选择从 Pandas DataFrame 返回列列表,其中一行中的所有值都是 True?

python - 如何检查一个列表/字典的元素是否存在于python中的另一个列表/字典中

python - 根据ID计算四分位数