【问题标题】:Updating Panel slice更新面板切片
【发布时间】:2016-11-22 14:11:22
【问题描述】:

我需要使用从数据框中撤出的一些值来更新面板切片。即使我没有收到任何错误,它也不起作用。怎么了?

df = pd.DataFrame(np.random.rand(10, 4),
                           columns=['sd', 'ed', 'sbc', 'ssd'],
                           index=np.arange(2000, 2010))
        
siPanel = pd.Panel(np.nan, items=np.arange(1998, 2014), major_axis=range(0, 10), minor_axis=range(0, 5))
        
spiPanel.loc[:, [0], [0]] = df.loc[:, ['sbc']]

注意维度不一样,我想用索引来对齐数据。 我知道转换为具有相同形状的数组可以获得我想要的,但我想找到另一个解决方案。

【问题讨论】:

    标签: pandas slice panel pandas-loc


    【解决方案1】:

    您遇到了一些半复杂的维度问题。

    让我们稍微分解一下你的作业线。

    siPanel.loc[:, [0], [0]] = df.loc[:, ['sbc']]
    

    df.loc[:, ['sbc']] 是一个形状为10 x 1 的数据框。 : 给了它10['sbc'] 给了它1。如果你完成df.loc[:, 'sbc'] 形状将是10 x 0(10, ),这将是一个系列。我想说一个好的规则是根据需要使用尽可能少的维度。

    siPanel.loc[:, [0], [0]] 是形状为16 x 1 x 1 的面板。使用上一段中的课程,您知道我们可以使用siPanel.loc[:, 0, 0] 将尺寸减小到(16, )。现在这也是一个系列,任务可以顺利进行。

    试试这个:

    siPanel.loc[:, 0, 0] = df.loc[:, 'sbc']
    
    siPanel.loc[:, 0, 0]
    
    1998         NaN
    1999         NaN
    2000    0.677186
    2001    0.030134
    2002    0.003945
    2003    0.894504
    2004    0.913937
    2005    0.553544
    2006    0.199962
    2007    0.384449
    2008    0.491008
    2009    0.408632
    2010         NaN
    2011         NaN
    2012         NaN
    2013         NaN
    Name: 0, dtype: float64
    

    【讨论】:

    • 非常感谢!我接近问题,但我没有看到错误!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多