【发布时间】:2015-03-24 20:56:34
【问题描述】:
我试图从 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 与 A 一起加入时才有效。这是为什么呢?
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
【问题讨论】:
-
尝试将级别传递给 .sub(),例如C = A.sub(A['d'], axis=0, level=1)
-
传递级别导致此错误:TypeError: Join on level between two MultiIndex objects is ambiguous