Wal*_*eed 5 python group-by shift pandas
我试图在 Pandas 数据框中完成两件事:
原始数据集
DateCompleted TranNumber Sales
0 1/1/17 10:15AM 3133 130.31
1 1/1/17 11:21AM 3531 103.12
2 1/1/17 12:31PM 3652 99.23
3 1/2/17 9:31AM 3689 83.22
4 1/2/17 10:31AM 3701 29.93
5 1/3/17 8:30AM 3709 31.31
Run Code Online (Sandbox Code Playgroud)
所需输出
DateCompleted TranNumber Sales NextTranSales LastRow
0 1/1/17 10:15AM 3133 130.31 103.12 No
1 1/1/17 11:21AM 3531 103.12 99.23 No
2 1/1/17 12:31PM 3652 99.23 NaN Yes
3 1/2/17 9:31AM 3689 83.22 29.93 No
4 1/2/17 10:31AM 3701 29.93 NaN Yes
5 1/3/17 8:30AM 3709 31.31 ... No
Run Code Online (Sandbox Code Playgroud)
我可以根据以下内容获取 NextTranSales:
df['NextTranSales'] = df.Sales.shift(-1)
Run Code Online (Sandbox Code Playgroud)
但我无法确定 DateCompleted 组中的最后一行,并且如果它是最后一行,则无法将 NextTranSales 标记为 Null。
感谢您的帮助!
如果您的数据框已按DateCompleted列排序,那么您可能只需要groupby.shift:
date = pd.to_datetime(df.DateCompleted).dt.date
df["NextTranSales"] = df.groupby(date).Sales.shift(-1)
Run Code Online (Sandbox Code Playgroud)
如果您需要该LastRow列,您可以找到最后一行索引groupby,然后分配yes给行:
last_row_index = df.groupby(date, as_index=False).apply(lambda g: g.index[-1])
df["LastRow"] = "No"
df.loc[last_row_index, "LastRow"] = "Yes"
df
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3682 次 |
| 最近记录: |