免责声明:这不是答案。
我尝试测试如何覆盖链式赋值与 .loc 中的值,参考上面 @Quang Hoang 共享的 pandas 文档链接。
这是我尝试过的:
dfmi = pd.DataFrame([list('abcd'),
list('efgh'),
list('ijkl'),
list('mnop')],
columns=pd.MultiIndex.from_product([['one', 'two'],
['first', 'second']]))
df1 = dfmi['one']['second']
df2 = dfmi.loc[:, ('one', 'second')]
df1 和 df2 的输出:
0 b
1 f
2 j
3 n
迭代 1:
value = ['z', 'x', 'c', 'v']
dfmi['one']['second'] = value
输出 df1:
0 z
1 x
2 c
3 v
迭代 2:
value = ['z', 'x', 'c', 'v']
dfmi.loc[:, ('one', 'second')] = value
输出 df2:
0 z
1 x
2 c
3 v
新集合的分配正在改变这两种情况下的值。
文档说:
引用 1:“方法 2 (.loc) 比方法 1(链式 [])更受青睐”
引用2:
“除了简单的情况之外,很难预测是否”getitem" (由链式选项使用)将返回一个视图或副本(这取决于数组的内存布局,pandas 对此不做任何保证),因此是否 "setitem“(由 .loc 使用)将修改 dfmi 或随后立即被抛出的临时对象。”
我无法理解上面的解释。如果 dfmi 中的值可以更改(在我的情况下)并且可能不会更改(如 Benoit 的情况),那么通过哪种方式获得结果?不确定我是否遗漏了一点。
寻求帮助