pandas DataFrame.shift()函数

pandas DataFrame.shift()函数可以把数据移动指定的位数

period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列.

eg: 有这样一个DataFrame数据:

import pandas as pd data1 = pd.DataFrame({ 'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'b': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] })
print data1
a b 0 0 9 1 1 8 2 2 7 3 3 6 4 4 5 5 5 4 6 6 3 7 7 2 8 8 1 9 9 0

如果想让 a和b的数据都往下移动一位:

data2 = data1.shift(axis=0)
print data2
a b 0 NaN NaN 1 0.0 9.0 2 1.0 8.0 3 2.0 7.0 4 3.0 6.0 5 4.0 5.0 6 5.0 4.0 7 6.0 3.0 8 7.0 2.0 9 8.0 1.0

如果是在行上往右移动一位:

data3 = data1.shift(axis=1)
print data3
a b 0 NaN 0.0 1 NaN 1.0 2 NaN 2.0 3 NaN 3.0 4 NaN 4.0 5 NaN 5.0 6 NaN 6.0 7 NaN 7.0 8 NaN 8.0 9 NaN 9.0

如果想往上或者往左移动,可以指定(periods=-1):

data4 = data1.shift(periods=-1, axis=0)
print data4
a b 0 1.0 8.0 1 2.0 7.0 2 3.0 6.0 3 4.0 5.0 4 5.0 4.0 5 6.0 3.0 6 7.0 2.0 7 8.0 1.0 8 9.0 0.0 9 NaN NaN

一个例子:

这里有一组某车站各个小时的总进站人数和总出站人数的数据:

entries_and_exits = pd.DataFrame({
    'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,
                 3144808, 3144895, 3144905, 3144941, 3145094],
    'EXITSn': [1088151, 1088159, 1088177, 1088231, 1088275,
               1088317, 1088328, 1088331, 1088420, 1088753]
})

要求计算每个小时该车站进出站人数

思路: 把第n+1小时的总人数-第n小时的总人数,就是这个小时里的进出站人数

entries_and_exits_hourly = entries_and_exits - entries_and_exits.shift(axis=0)print(entries_and_exits_hourly.fillna(0)) #最后用0来填补NaN
ENTRIESn  EXITSn
0       0.0     0.0
1      23.0     8.0
2      18.0    18.0
3      71.0    54.0
4     170.0    44.0
5     214.0    42.0
6      87.0    11.0
7      10.0     3.0
8      36.0    89.0
9     153.0   333.0
(0)

相关推荐