python - Pandas 面板数据更新

标签 python panel-data pandas

我在 pandas 中使用面板数据结构来存储 3d 面板。

T=pd.Panel(data=np.zeros((n1,n2,n3)),items=n1_label, major_axis=n2_label, minor_axis=n3_label)

稍后,我尝试更新(增加)存储在循环内各个位置的值。目前我在做:

 u=T.get_value(n1_loop,n2_loop,n3_loop)
 T.set_value(n1_loop,n2_loop,n3_loop,u+1)

我的问题 - 这是最简单的方法吗?还有其他更简单的方法吗?以下不工作:

T[n1_loop,n2_loop,n3_loop] +=1

T[n1_loop,n2_loop,n3_loop] = T[n1_loop,n2_loop,n3_loop] +1

最佳答案

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

enter image description here


精确的 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 method

pn.update(pn.loc['b':'d', list('AE'), ['X']].add(1))

如果我们使用 to_frame 方法,我们可以看到它做了什么

pn.to_frame().astype(int)

enter image description here

pn.loc[:, :, 'X'].astype(int).T

enter image description here


您的案例
这应该有效

T.update(T.loc[[n1_loop], [n2_loop], [n3_loop]].add(1))

关于python - Pandas 面板数据更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009667/

相关文章:

R - 使用 data.table 有效测试多行和多列的滚动条件

r - 我如何在 R 中创建这个变量?

python - 值错误 : Grouper and axis must be same length

python - 如何仅连接字符串中的连续数字?

python - 导入时模拟模块全局变量

python - 从使用 python pandas 制作的数据透视表中进行过滤和选择

python - 将带有俄语字符的 numpy.ndarray 写入文件

python `YYYY-MM-DD`

pandas - 模块 'pandas' 没有属性 'Panel'

python - 与 pandas 一起使用 re.match 时出现“预期的字符串或缓冲区”