我有一个看起来像这样的数据框:
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,所以除了手动循环外,我不知道该怎么做。我宁愿不要这样做,因为它会很慢。
答案 0 :(得分:4)
IIUC,您只是在寻找groupby
和diff
,只要您为每个日期的每个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