【问题标题】:fill_value in the pandas shift doesn't work with groupbypandas shift 中的 fill_value 不适用于 groupby
【发布时间】:2019-08-29 19:43:40
【问题描述】:

我需要为每个名称移动 pandas 数据框中的列,并用预定义的值填充生成的 NA。下面是用python 2.7编译的代码sn-p

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

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

【问题讨论】:

  • 在此处添加.ffill()

标签: pandas python-2.7


【解决方案1】:

似乎填充值是按组而不是单个值。试试下面的,

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

【讨论】:

猜你喜欢
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 2021-11-07
  • 2018-08-04
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多