具有前一个非唯一日期的访问行

时间:2018-12-06 22:42:32

标签: python pandas

我有一个看起来像这样的数据框:

       Date        Module      Lines  
0      2017-07-01  Engine      68312
1      2017-07-01  Game        20322
2      2017-07-01  Editor      34433
3      2017-07-02  Engine      68432
4      2017-07-02  Game        21401
5      2017-07-02  Editor      34431

我想创建一列来计算特定日期和前一天之间的行差。因此,对于引擎模块,在2017-02-02上差异为120。

我已经考虑过将shift列用于类似的操作:

data["Lines Delta"] = data["Lines"] - data["Lines"].shift(1, "D")

但是这不起作用,我认为是因为日期不是索引。我无法将其作为索引,因为它不是唯一的。

我不太熟悉Pandas,所以除了手动循环外,我不知道该怎么做。我宁愿不要这样做,因为它会很慢。

1 个答案:

答案 0 :(得分:4)

IIUC,您只是在寻找groupbydiff,只要您为每个日期的每个Module输入一个条目即可。

# if your dates aren't datetime to start with, uncomment:
# df['Date'] = pd.to_datetime(df['Date'])
# and if your dates aren't sorted:
# df.sort_values('Date', inplace=True)

df['delta'] = df.groupby('Module').Lines.diff()
>>> df
        Date  Module  Lines   delta
0 2017-07-01  Engine  68312     NaN
1 2017-07-01    Game  20322     NaN
2 2017-07-01  Editor  34433     NaN
3 2017-07-02  Engine  68432   120.0
4 2017-07-02    Game  21401  1079.0
5 2017-07-02  Editor  34431    -2.0