【问题标题】:Subtract a column in pandas dataframe by its first value用第一个值减去熊猫数据框中的一列
【发布时间】:2017-02-20 20:01:50
【问题描述】:

我需要用它的第一个值减去一列熊猫数据框中的所有元素。

在这段代码中,pandas 抱怨 self.inferred_type,我猜这是循环引用。

df.Time = df.Time - df.Time[0]

在这段代码中,pandas 抱怨在副本上设置值。

df.Time = df.Time - df.iat[0,0]

在 Pandas 中进行此计算的正确方法是什么?

【问题讨论】:

    标签: python datetime pandas time subtraction


    【解决方案1】:

    我认为您可以通过iloc 选择Time 列中的第一项:

    df.Time = df.Time - df.Time.iloc[0]
    

    示例:

    start = pd.to_datetime('2015-02-24 10:00')
    rng = pd.date_range(start, periods=5)
    
    df = pd.DataFrame({'Time': rng, 'a': range(5)})  
    print (df)
                     Time  a
    0 2015-02-24 10:00:00  0
    1 2015-02-25 10:00:00  1
    2 2015-02-26 10:00:00  2
    3 2015-02-27 10:00:00  3
    4 2015-02-28 10:00:00  4
    
    df.Time = df.Time - df.Time.iloc[0]
    print (df)
        Time  a
    0 0 days  0
    1 1 days  1
    2 2 days  2
    3 3 days  3
    4 4 days  4
    

    注意:

    对我来说,你的两种方式也很完美。

    【讨论】:

    • 太棒了!对我来说,在副本上设置值的警告只出现一次,这真的很奇怪。 df.Time 是副本还是对原始数据帧的引用?
    • 我认为是参考,因为不能以这种方式创建新列 - df.newcol = df.Time - df.Time.iloc[0]
    • 关于警告 - 有时会发生。你的熊猫是什么版本的?
    • 熊猫的版本是0.14.1。
    • 嗯,真的很老了。现在最后是0.19.0。我认为你可以升级。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2013-12-10
    • 2014-06-10
    • 2019-08-07
    相关资源
    最近更新 更多