【问题标题】:pandas panel data update熊猫面板数据更新
【发布时间】:2017-02-21 21:48:30
【问题描述】:

我在 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

【问题讨论】:

    标签: python panel-data pandas


    【解决方案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
    


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

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


    您的案例
    这应该工作

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

    【讨论】:

    • 不知何故我在尝试 T.update(T.loc[n1_loop, n2_loop, n3_loop].add(1)) AttributeError: 'numpy.float64' object has no attribute 'add'
    • @dayum 我假设你的循环变量是列表。
    • 很抱歉之前应该提到过,但是 n1_loop、n2_loop 和 n3_loop 都是字符串(引用沿 3 轴的索引)
    • @dayum 如果n1_loop 是一个字符串,它是items 索引的单个成员等等,那么使用T.update(T.loc[[n1_loop], [n2_loop], [n3_loop]].add(1))
    猜你喜欢
    • 2014-06-19
    • 2016-12-02
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多