pandas 中上下两行相减(隔行相减) -- shift函数的使用
最近使用pandas处理数据,需求是想相邻两行上下相减,查API发现shift函数,很灵活,。你也可以隔任意行相减。
p['xx_1'] = p["xx"].shift(1)
上面得到的就是xx字段向下移动一行的结果,和之前相比向下移动一行,你可以设置为任意行,也可是向上向下
p['xx'] - p["xx_1"]
这就是前后两行的差值,很方便,Pandas很强大
pandas 中上下两行相减(隔行相减) -- shift函数的使用最近使用pandas处理数据,需求是想相邻两行上下相减,查API发现shift函数,很灵活,。你也可以隔任意行相减。p['xx_1'] = p["xx"].shift(1)上面得到的就是xx字段向下移动一行的结果,和之前相比向下移动一行,你可以设置为任意行,也可是向上向下p['xx'] - p["xx_1"]这就是...
这里首先要介绍官方文档,对
python
有了进一步深度的学习的大家们应该会发现,网上不管csdn或者简书上还是什么地方,教程来源基本就是官方文档,所以英语只要还过的去,推荐看官方文档,就算不够好,也可以只看它里面的sample就够了
好了,不说废话,看我的代码:
import
pandas
as pd
import numpy as np
rng = pd.date_range('20180101', periods=40)
ts = pd.Series(np.arange(1,41), index=rng)#这一
行
和上一
行
生成了一个index为时间,一共40天的数据
ts_m = ts.re
今天接到一个需求,要求对数据
错位
相减
。感觉写得有点麻烦,如果有其他方
法
,欢迎留言交流
数据说明:有客户、消费日期、消费额度
求解目标:对于
同一
个客户,对日期升序排序,如果下一个日期的消费额度大于上一个日期的消费额度,则标记,最终取出第一次发生时对应的较大的日期
最简单的方
法
是使用
pandas
.Series.shift 具体可参考官方文档
https://
pandas
.pydata.org/
pandas
-docs/stable/reference/api/
pandas
.Series.shift.html
在
pandas
中,
两列
日期类型数据
相减
可以使用减
法
运算符,结果会得到一个 Timedelta 类型。如果要求结果为整数类型,可以使用其 dt 属性中的 total_seconds 方
法
,来获取时间间隔的总秒数,再进
行
整数类型转换。
示例代码如下:
import
pandas
as pd
df['date_difference'] = (df['date2'] - df['date1']).d...
a=np.array([['北京','北方','一线','非沿海'],['杭州','南方','二线','非沿海'],['深圳','南方','一线','沿海'],['烟台','北方','三线','沿海']])
df1=pd.DataFrame(a,index=[1,2,3,4],columns=['城市','地理','级别','是否沿海'])
城市 地理 级别 是否沿海
1 北京 北方 一线 非沿海
2 杭州 南方 二线 非沿海
3 深圳 南方 一线 沿海
4 烟台 北方 三线 沿海
假如我们把
1.diff()函数df['1].diff()
结果第一个结果为NAN。
2.shift()函数:df['1'].shift(-1) - df['1'] 代表下一
行
减去上一
行
。
结果最后一
行
值为NAN。
Series.shift(periods=1, freq=None, axis=0, fill_value=None)
3.
pandas
对单
列
、多
列
进
行
计算
对多
列
进
行
公式计算:
https://blog.csdn.net/zwhooo/article/details/79696558
需求: 按照表1的“用户唯一ID”,在表2 中找到对应的“客户风险等级”和“评估日期”
难点: 每个“用户唯一ID”对对应不同“评估日期”日期下的“客户风险等级”,所以不能简单的使用pd.merge()
解决方
法
: 双层循环,找到时间差小的“评估日期”作为当前用户的“客户风险等级”,同时为了体现是最近的信息,必须保证
# 客户风险表
## 因为每个用户在不同时期会有不同的风险等级,所以这里需要一个一个迭代,去匹配与当前交易日期最接近的评估日期下的风险等级
custom_ri
Pandas
数据操作import
pandas
as pd1. 索引操作1.1 Series索引1.1.1
行
索引Series通过索引获取对应的value有两种方式。一种是通过索引的名称,一种是通过位置# 先创建一个索引维abcde的Series
ser_obj = pd.Series(range(5), index = ['a', 'b', 'c', 'd', 'e'])
print ser_ob