TL;DR
T.update(T.loc[[n1_loop], [n2_loop], [n3_loop]].add(1))
对于DataFrame的类比操作将使用loc
进行赋值
df = pd.DataFrame(np.zeros((5, 5)), list('abcde'), list('ABCDE'), int)
df.loc['b':'d', list('AE')] += 1
df
精确的pd.Panel
模拟会生成错误
pn = pd.Panel(np.zeros((5, 5, 2)), list('abcde'), list('ABCDE'), list('XY'), int)
pn.loc['b':'d', list('AE'), ['X']] += 1
pn
NotImplementedError: cannot set using an indexer with a Panel yet!
但是我们仍然可以将其切片。
pn = pd.Panel(np.zeros((5, 5, 2)), list('abcde'), list('ABCDE'), list('XY'), int)
pn.loc['b':'d', list('AE'), ['X']]
<class 'pandas.core.panel.Panel'>
Dimensions: 3 (items) x 2 (major_axis) x 1 (minor_axis)
Items axis: b to d
Major_axis axis: A to E
Minor_axis axis: X to X
我们可以使用
update
方法。
pn.update(pn.loc['b':'d', list('AE'), ['X']].add(1))
如果我们使用
to_frame
方法,我们可以看到它做了一些事情。
pn.to_frame().astype(int)
OR
pn.loc[:, :, 'X'].astype(int).T
你的案例
这应该可以工作
T.update(T.loc[[n1_loop], [n2_loop], [n3_loop]].add(1))
n1_loop
是items
索引的单个成员字符串,那么可以使用T.update(T.loc[[n1_loop], [n2_loop], [n3_loop]].add(1))
。 - piRSquared