You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中如何为np.diff设置参考点,处理带时间戳数据集且保留原数据结构

如何为带时间戳的DataFrame添加自定义初始参考点的差分列?

我有一个带时间戳的数据集,代码如下:

import pandas as pd
data = pd.DataFrame({'date': pd.to_datetime(['1992-01-01', '1992-02-01', '1992-03-01', '1992-04-01', '1992-05-01']), 'sales': [10, 20, 30, 40, 50], 'price': [4302, 4323, 4199, 4397, 4159]})

我尝试使用np.diff(data['price'])对price列进行差分运算,但希望为时间戳为1992-01-01的第一行设置参考点,参考值为4100,期望得到如下数据集:

date, sales, diff_price
1992-01-01, 10, 4302-4100
1992-02-01, 20, 4323-4302
1992-03-01, 30, 4199-4323
1992-04-01, 40, 4397-4199
1992-05-01, 50, 4159-4397

请问有没有符合Python风格的简便方法可以实现该需求,且不改变原数据的结构?


当然有!用Pandas本身的方法就能优雅解决这个问题,完全不需要复杂操作,还能保证原数据结构丝毫不改动。下面给你两种简洁的实现方式:

方法一:构造基准序列做差(最直观)

核心思路是先创建一个包含初始参考值的基准序列,再直接和原price列做减法:

import pandas as pd

data = pd.DataFrame({'date': pd.to_datetime(['1992-01-01', '1992-02-01', '1992-03-01', '1992-04-01', '1992-05-01']), 'sales': [10, 20, 30, 40, 50], 'price': [4302, 4323, 4199, 4397, 4159]})

# 构造基准值:第一个元素是参考值4100,后面跟着price列的前4个值
base_values = [4100] + data['price'].tolist()[:-1]
# 新增diff_price列,计算当前price与对应基准值的差
data['diff_price'] = data['price'] - base_values

方法二:利用diff()补全初始值

如果你习惯用diff()方法计算常规差分,也可以先得到后续行的差值,再手动替换掉第一行的缺失值:

# 计算常规差分,第一行会得到NaN
diff_results = data['price'].diff()
# 替换第一行的NaN为初始参考差值
diff_results.iloc[0] = data['price'].iloc[0] - 4100
# 将结果添加为新列
data['diff_price'] = diff_results

验证结果

运行任意一种方法后,查看data都会得到符合你预期的结果:

date  sales  price  diff_price
0 1992-01-01     10   4302         202
1 1992-02-01     20   4323          21
2 1992-03-01     30   4199        -124
3 1992-04-01     40   4397         198
4 1992-05-01     50   4159        -238

两种方法都不会改动原DataFrame的索引、列顺序或其他数据,完全符合你的需求。


内容的提问来源于stack exchange,提问作者user3104352

火山引擎 最新活动