Skip to main content
 首页 » 编程设计

python之多索引 Pandas 数据框和 .diff()

2025年05月04日17unruledboy

假设我有以下多索引 pandas Dataframe:

                     A    B 
Date        Code      
01-01-2017  s1       1    2 
            s2       3    1 
01-02-2017  s1       2    2     
            s2       3    3 

与讨论的内容不同 here ,我不希望 .diff(1) 对具有相同日期的值进行操作并在每个新日期重置,我希望 .diff(1)提供以下输出:

                     A    B 
Date        Code      
01-01-2017  s1       Nan  Nan 
            s2       Nan  Nan 
01-02-2017  s1       1    0     
            s2       2    1 

即 .diff(1) 根据索引的 differebnt 值在级别 0 指定的 block 进行差异,而不是在建议的链接中的 block 内。 换句话说,我想用条目减去这两个矩阵:

|2    2|  _  |1    2|  
|3    3|     |3    1| 

请您参考如下方法:

您可以使用 groupby通过二级 DataFrameGroupBy.diff :

df = df.sort_index() 
 
df = df.groupby(level=1).diff() 
print (df) 
                   A    B 
Date       Code           
01-01-2017 s1    NaN  NaN 
           s2    NaN  NaN 
01-02-2017 s1    1.0  0.0 
           s2    0.0  2.0 

因为如果使用第一级:

df = df.groupby(level=0).diff() 
print (df) 
                   A    B 
Date       Code           
01-01-2017 s1    NaN  NaN 
           s2    2.0 -1.0 
01-02-2017 s1    NaN  NaN 
           s2    1.0  1.0