熊猫移位中的fill_value不适用于groupby

时间:2019-08-29 10:36:37

标签: pandas python-2.7

我需要为每个名称移动pandas数据框中的列,并用预定义的值填充所得的NA。以下是使用python 2.7编译的代码段

import pandas as pd

d = {'Name': ['Petro', 'Petro', 'Petro', 'Petro', 'Petro', 'Mykola', 'Mykola', 'Mykola', 'Mykola', 'Mykola', 'Mykyta', 'Mykyta', 'Mykyta', 'Mykyta', 'Mykyta'],
     'Month': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
     'Value': [25, 2.5, 24.6, 28, 26.4, 35, 24, 35, 22, 27, 30, 30, 34, 30, 23]
     }
data = pd.DataFrame(d)
data['ValueLag'] = data.groupby('Name').Value.shift(-1, fill_value = 20)

print data

运行上面的代码后,我得到以下输出

    Month    Name  Value  ValueLag
0       1   Petro   25.0       2.5
1       2   Petro    2.5      24.6
2       3   Petro   24.6      28.0
3       4   Petro   28.0      26.4
4       5   Petro   26.4       NaN
5       1  Mykola   35.0      24.0
6       2  Mykola   24.0      35.0
7       3  Mykola   35.0      22.0
8       4  Mykola   22.0      27.0
9       5  Mykola   27.0       NaN
10      1  Mykyta   30.0      30.0
11      2  Mykyta   30.0      34.0
12      3  Mykyta   34.0      30.0
13      4  Mykyta   30.0      23.0
14      5  Mykyta   23.0       NaN

好像fill_value在这里不起作用。虽然我需要用一些数字填充NaN,例如4。

或者如果要讲所有故事,我需要像这样扩展最后一个值

   Month    Name  Value  ValueLag
0       1   Petro   25.0       2.5
1       2   Petro    2.5      24.6
2       3   Petro   24.6      28.0
3       4   Petro   28.0      26.4
4       5   Petro   26.4       26.4
5       1  Mykola   35.0      24.0
6       2  Mykola   24.0      35.0
7       3  Mykola   35.0      22.0
8       4  Mykola   22.0      27.0
9       5  Mykola   27.0       27.0
10      1  Mykyta   30.0      30.0
11      2  Mykyta   30.0      34.0
12      3  Mykyta   34.0      30.0
13      4  Mykyta   30.0      23.0
14      5  Mykyta   23.0       23.0

如果移动正数的周期,是否有办法向前填充最后一个值或向后填充第一个值?

1 个答案:

答案 0 :(得分:1)

似乎填充值是按组而不是单个值。尝试以下方法,

data['ValueLag'] = data.groupby('Name').Value.shift(-1).ffill()