参考:
https://stackoverflow.com/questions/23296282还有这个:
https://bit.ly/2Edy74i简单来说, `df.loc["Store 1"]["Cost"]` 会透过 2 次__getitem__ 来取值,后面行为的开始执行时取决于前面行为的完成时机。若资料可以允许写成 `df.loc[:, ('Store 1', 'cost')]`则 pandas 可以一次根据后面的参数取值,相对来说较快关于回传值是 view 还是 copy ,基本上可以照着stackoverflow 那篇回答的规则去判断。要了解的更详细的话,推荐你直接去追 source code:pd.DataFrame.__getitem__ :
https://git.io/fpPuH里面有写到好几种状况,比较值得注意的地方有self._slice (generic._slice):
https://git.io/fpPzxself._take (generic._take):
https://git.io/fpP2E修正一下:上面的 generic 应该是 generic.NDFrame所以说,用 chain indexing 问题在于一般情况下不容易判断出取的值到底是 view 还是 copy (不了解如stackoverflow 那篇回答所说的规则),而非资料在内存中的情况差异所影响。而因为会影响取值结果是 view/copy 的情况很多种,所以官方还是建议少用 chain indexing。