Multianddex DataFrame上的Pandas dataframe.sub()方法?

时间:2015-03-24 20:56:34

标签: python pandas

我试图从Pandas MultiIndex DataFrame中的另一组列中减去一列,但是当我尝试这样做时,我只得到'nan'值。我提出了一个解决方案,但我不想在每次执行此操作时处理列的扁平处理。有人可以解释我对索引或其他什么不了解吗?

In [212]: A = df.loc[start:end, idx[:, 'MSHP Bedrooms', :, :, 'C']]

In [213]: B = df.loc[start:end, idx[:, :, 'Loft', :, 'C']]

In [214]: print(A)
unit                Condensing Unit 1                        
head                    MSHP Bedrooms                        
room                            Bed 2       Bed 3       Bed 4
type                      Temperature Temperature Temperature
units                               C           C           C
2014-08-14 00:00:00         25.120001   23.389999   22.820000
2014-08-14 00:01:00         25.120001   23.379999   22.809999
2014-08-14 00:02:00         25.110001   23.370001   22.799999
2014-08-14 00:03:00         25.110001   23.360001   22.799999
2014-08-14 00:04:00         25.110001   23.370001   22.790001
2014-08-14 00:05:00         25.100000   23.360001   22.780001

In [215]: print(B)
unit                Condensing Unit 1
head                        MSHP Loft
room                             Loft
type                      Temperature
units                               C
2014-08-14 00:00:00         26.190001
2014-08-14 00:01:00         26.190001
2014-08-14 00:02:00         26.180000
2014-08-14 00:03:00         26.190001
2014-08-14 00:04:00         26.190001
2014-08-14 00:05:00         26.180000

In [216]: C = A.sub(B, axis=0)

In [217]: print(C)
unit                Condensing Unit 1                                    
head                    MSHP Bedrooms                           MSHP Loft
room                            Bed 2       Bed 3       Bed 4        Loft
type                      Temperature Temperature Temperature Temperature
units                               C           C           C           C
2014-08-14 00:00:00               NaN         NaN         NaN         NaN
2014-08-14 00:01:00               NaN         NaN         NaN         NaN
2014-08-14 00:02:00               NaN         NaN         NaN         NaN
2014-08-14 00:03:00               NaN         NaN         NaN         NaN
2014-08-14 00:04:00               NaN         NaN         NaN         NaN
2014-08-14 00:05:00               NaN         NaN         NaN         NaN

In [218]: 

有趣的是,我做了以下工作。我将列重置为单个级别,只有在我用B加入B时它才会起作用。为什么会这样?

In [223]: A.columns = ['a','b','c']

In [224]: B.columns = ['d']

In [225]: A = A.join(B)

In [226]: C = A.sub(A['d'], axis=0)

In [227]: print(C)
                        a         b         c  d
2014-08-14 00:00:00 -1.07 -2.800001 -3.370001  0
2014-08-14 00:01:00 -1.07 -2.810001 -3.380001  0
2014-08-14 00:02:00 -1.07 -2.809999 -3.380001  0
2014-08-14 00:03:00 -1.08 -2.830000 -3.390001  0
2014-08-14 00:04:00 -1.08 -2.820000 -3.400000  0
2014-08-14 00:05:00 -1.08 -2.820000 -3.400000  0

1 个答案:

答案 0 :(得分:0)

在这里(Subtract a column from one pandas dataframe from another)我找到了解决方案。在减去的数据帧上执行df.squeeze()解决了它。

In [34]: C = A.sub(B.squeeze(), axis=0)

In [35]: print(C)
unit                Condensing Unit 1                        
head                    MSHP Bedrooms                        
room                            Bed 2       Bed 3       Bed 4
type                      Temperature Temperature Temperature
units                               C           C           C
2014-08-14 00:00:00             -1.07   -2.800001   -3.370001
2014-08-14 00:01:00             -1.07   -2.810001   -3.380001
2014-08-14 00:02:00             -1.07   -2.809999   -3.380001
2014-08-14 00:03:00             -1.08   -2.830000   -3.390001
2014-08-14 00:04:00             -1.08   -2.820000   -3.400000
2014-08-14 00:05:00             -1.08   -2.820000   -3.400000