代码之家  ›  专栏  ›  技术社区  ›  Franck Dernoncourt

在忽略NaN变化的情况下,计算数据帧中每列中值的变化

  •  3
  • Franck Dernoncourt  · 技术社区  · 7 年前

    unutbu's answer ):

    import pandas as pd
    import numpy as np
    
    frame = pd.DataFrame({
        'time':[1234567000 , np.NaN, np.NaN],
        'X1':[96.32,96.01,96.05],
        'X2':[23.88,23.96,23.96]
    },columns=['time','X1','X2']) 
    
    print(frame)
    
    changes = (frame.diff(axis=0) != 0).sum(axis=0)
    print(changes)
    
    changes = (frame != frame.shift(axis=0)).sum(axis=0)
    print(changes)
    

    返回:

               time     X1     X2
    0  1.234567e+09  96.32  23.88
    1           NaN  96.01  23.96
    2           NaN  96.05  23.96
    
    time    3
    X1      3
    X2      2
    dtype: int64
    
    time    3
    X1      3
    X2      2
    dtype: int64
    

    相反,结果应该是(注意时间列中的变化):

    time    2
    X1      3
    X2      2
    dtype: int64
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Scott Boston    7 年前
    change = (frame.fillna(0).diff() != 0).sum()
    

    time    2
    X1      3
    X2      2
    dtype: int64
    

    NaN是 "truthy" .将NaN更改为零,然后进行计算。

    nan - nan = nan
    
    nan != 0  = True
    
    fillna(0)
    
    0 - 0 = 0
    
    0 != 0 = False