vp7*_*vp7 6 python numpy constraints pandas
F_Date B_Date col is_B
01/09/2019 02/08/2019 2200 1
01/09/2019 03/08/2019 672 1
02/09/2019 03/08/2019 1828 1
01/09/2019 04/08/2019 503 0
02/09/2019 04/08/2019 829 1
03/09/2019 04/08/2019 1367 0
02/09/2019 05/08/2019 559 1
03/09/2019 05/08/2019 922 1
04/09/2019 05/08/2019 1519 0
01/09/2019 06/08/2019 376 1
Run Code Online (Sandbox Code Playgroud)
我想生成一列c_a,以便最初输入flight_date时该值25000基于col值而减小。例如 :
预期产量:
F_Date B_Date col is_B c_a
01/09/2019 02/08/2019 2200 1 25000
01/09/2019 03/08/2019 672 1 25000 - 2200
02/09/2019 03/08/2019 1828 1 25000
01/09/2019 04/08/2019 503 0 25000 - 2200 - 672
02/09/2019 04/08/2019 829 1 25000 - 1828
03/09/2019 04/08/2019 1367 0 25000
02/09/2019 05/08/2019 559 1 25000 - 1828 - 829
03/09/2019 05/08/2019 922 1 25000 (since last value had is_B as 0)
04/09/2019 05/08/2019 1519 0 25000
01/09/2019 06/08/2019 376 1 25000 - 2200 - 672 (Since last appearance had is_B as 0)
Run Code Online (Sandbox Code Playgroud)
谁能找到大熊猫实现相同目标的方法?
我想,我找到了一个非常简洁的解决方案:
df['c_a'] = df.groupby('F_Date').apply(lambda grp:
25000 - grp.col.where(grp.is_B.eq(1), 0).shift(fill_value=0)
.cumsum()).reset_index(level=0, drop=True)
Run Code Online (Sandbox Code Playgroud)
结果是:
F_Date B_Date col is_B c_a
0 01/09/2019 02/08/2019 2200 1 25000
1 01/09/2019 03/08/2019 672 1 22800
2 02/09/2019 03/08/2019 1828 1 25000
3 01/09/2019 04/08/2019 503 0 22128
4 02/09/2019 04/08/2019 829 1 23172
5 03/09/2019 04/08/2019 1367 0 25000
6 02/09/2019 05/08/2019 559 1 22343
7 03/09/2019 05/08/2019 922 1 25000
8 04/09/2019 05/08/2019 1519 0 25000
9 01/09/2019 06/08/2019 376 1 22128
Run Code Online (Sandbox Code Playgroud)
这个想法,以及基于组F_Date == '01/09/2019'的示例:
grp.col.where(grp.is_B.eq(1), 0)- 从组中的下一行中减去的值:
0 2200
1 672
3 0
9 376
Run Code Online (Sandbox Code Playgroud).shift(fill_value=0)- 从组中当前行中减去的值
:
0 0
1 2200
3 672
9 0
Run Code Online (Sandbox Code Playgroud).cumsum()- 要减去的累积值:
0 0
1 2200
3 2872
9 2872
Run Code Online (Sandbox Code Playgroud)25000 - ...- 目标值:
0 25000
1 22800
3 22128
9 22128
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |