【问题标题】:Pandas subtract 2 rows from same dataframe熊猫从同一数据框中减去 2 行
【发布时间】:2014-12-28 10:02:48
【问题描述】:

如何在以下数据帧 (df) 中减去一行:

RECL_LCC          1          2          3
RECL_LCC  35.107655  36.015210  28.877135
RECL_PI   36.961519  43.499506  19.538975

我想做这样的事情:

df['Difference'] = df['RECL_LCC']-df['RECL_PI']

但这给出了:

*** KeyError: 'RECL_LCC'

【问题讨论】:

    标签: python pandas subtraction


    【解决方案1】:

    你可以使用diff()函数:

    df.set_index('RECT_LCC', inplace=True)
    df.diff(-1)
    
    
                        1           2         3
    RECT_LCC            
    RECT_LCC    -1.853864   -7.484296   9.33816
    RECL_PI           NaN         NaN       NaN
    

    默认情况下,它移动 1 行。在您的情况下,由于您减去下一行而不是上一行,因此您需要设置 diff(-1)

    【讨论】:

      【解决方案2】:

      您可以使用df.loc按索引值选择行:

      In [98]: df.loc['Diff'] = df.loc['RECL_LCC'] - df.loc['RECL_PI']
      
      In [99]: df
      Out[99]: 
      RECL_LCC          1          2          3
      RECL_LCC  35.107655  36.015210  28.877135
      RECL_PI   36.961519  43.499506  19.538975
      Diff      -1.853864  -7.484296   9.338160
      

      【讨论】:

      • 如果你想计算几百行怎么办?
      • @Kartik:没有质的区别。但请注意,DataFrame 将数据存储在 column-based format 中。因此,如果列具有不同的dtypes,那么您最好以允许您采用列差异而不是行差异的格式构建 DataFrame。
      • @Kartik:还要注意,Pandas 根据索引对齐值。例如,考虑返回pd.Series([0,0,0], index=['A','B','C'])pd.Series([1,2,3], index=['A','B','C']) - pd.Series([2,1,3], index=['B','A','C'])。这有时非常有用,但如果您的数据已经对齐(即两个系列具有相同的索引),那么您可能会获得更好的性能,将您的数据视为一个大 NumPy 数组并使用 NumPy 而不是 Pandas 执行计算。如果您希望计算每对行的差异,而不仅仅是两行,则尤其如此。
      • @unutbu。谢谢!但是,这就是我一直在寻找的答案:stackoverflow.com/questions/23142967/…。使用shift,并将移位后的值存储在另一列中。我正在寻找的功能是shift。我记得在某个时候读过它,但忘记了细节。
      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 2014-06-10
      • 2013-12-04
      • 2015-07-14
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多