【问题标题】:Two dataframe of yearly data how to find inbetween years年度数据的两个数据框如何在年份之间找到
【发布时间】:2019-07-18 00:53:00
【问题描述】:

我有一个 python 问题

df_2021 = pd.DataFrame([(10,20),(30,250),(50,60)], columns=['Toronto','Hamilton'])
df_2026 = pd.DataFrame([(100,200),(300,400),(500,600)], columns=['Toronto','Hamilton'])

我有两个这样的数据框。我试图找到中间年份的值,即(2022、2023、2024、2025)。我必须报告年度数字,所以这些必须是整数。

我怎样才能有效地推断这一点,没有舍入错误并保持 int

【问题讨论】:

    标签: python pandas numpy lambda


    【解决方案1】:

    np.linspace 直接这样做

    >>> np.linspace(df_2021, df_2026, 6) # 6 because we have 6 years
    
    array([[[ 10.,  20.],
            [ 30., 250.],
            [ 50.,  60.]],
    
           [[ 28.,  56.],
            [ 84., 280.],
            [140., 168.]],
    
           [[ 46.,  92.],
            [138., 310.],
            [230., 276.]],
    
           [[ 64., 128.],
            [192., 340.],
            [320., 384.]],
    
           [[ 82., 164.],
            [246., 370.],
            [410., 492.]],
    
           [[100., 200.],
            [300., 400.],
            [500., 600.]]])
    

    要获取数据框列表,只需

    my_dfs = [pd.DataFrame(x, columns=['Toronto','Hamilton']) for x in np.linspace(df_2021, df_2026, 6)]
    

    请注意,linspace 已更新为仅适用于 1.16.0 及更高版本的非标量输入

    【讨论】:

    • 有没有办法在数据框中输出它们?
    • @ReeseFitzmaurice 只需访问每个项目..我已经编辑
    • 似乎是个好主意,只是它不起作用并在我的系统上抛出ValueError: The truth value...:numpy 1.15.4,pandas 0.24.2
    • @QuangHoang 很有趣,我在 numpy '1.16.4' 中运行,并且肯定会运行!
    • @QuangHoang 刚刚在文档中看到,它从1.16 开始工作;)可能想尝试 numpy
    【解决方案2】:

    另一个适用于低版本 numpy 的解决方案:

    (pd.DataFrame({2021: df_2021.stack(),
                  2026: df_2026.stack()})
       .reindex(range(2021,2027), axis=1)
       .interpolate(axis=1)
       .astype(int)
    )
    

    给予

                2021  2022  2023  2024  2025  2026
    0 Toronto     10    28    46    64    82   100
      Hamilton    20    56    92   128   164   200
    1 Toronto     30    84   138   192   246   300
      Hamilton   250   280   310   340   370   400
    2 Toronto     50   140   230   320   410   500
      Hamilton    60   168   276   384   492   600
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2015-07-31
      • 2015-04-27
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      相关资源
      最近更新 更多