【发布时间】:2021-01-19 08:52:21
【问题描述】:
我想在 python 中创建 'target_start' 列:
| id | start | end | diff | target_start |
|---|---|---|---|---|
| 12220 | 1999-11-22 | 2008-08-31 | 3515 | 1999-11-22 |
| 12220 | 2018-04-16 | 2019-09-15 | 1 | 2018-04-16 |
| 12220 | 2019-09-16 | 2019-11-30 | 1 | 2018-04-16 |
| 12220 | 2019-12-01 | 2020-03-31 | 1 | 2018-04-16 |
| 12220 | 2020-04-01 | 2020-06-30 | -711 | 2018-04-16 |
| 11132 | 2018-07-20 | 2019-09-15 | 1 | 2018-07-20 |
| 11132 | 2019-09-16 | 2021-01-01 | -44197 | 2018-07-20 |
这在 Excel 中很容易解决:
但我不知道,我如何在 pyton 中做到这一点:第一个目标行是“1”,然后:
df.loc[df.index==0,'target_start']= df['start']
我试过这段代码,但没有用:
import pandas as pd
df=pd.read_excel('./Shift.xlsx')
#if id != id.shift(1) then target_start = start
df.loc[df['id'] != df['id'].shift(1), 'target_start'] = df['start']
#elif: diff != 1 then target_start = start
df.loc[df['diff'].shift(1) != 1, 'target_start'] = df['start']
#else: target_start = target_start.shift(1)
df.loc[(df.index != 0) & (df['id'] == df['id'].shift(1)) & (df['diff'].shift(1) == 1), 'target_start']=df['target_start'].shift(1)
print(df)
结果是:
| id | start | end | diff | target_start |
|---|---|---|---|---|
| 12220 | 1999-11-22 | 2008-08-31 | 3515 | 1999-11-22 |
| 12220 | 2018-04-16 | 2019-09-15 | 1 | 2018-04-16 |
| 12220 | 2019-09-16 | 2019-11-30 | 1 | 2018-04-16 |
| 12220 | 2019-12-01 | 2020-03-31 | 1 | NaT |
| 12220 | 2020-04-01 | 2020-06-30 | -711 | NaT |
| 11132 | 2018-07-20 | 2019-09-15 | 1 | 2018-07-20 |
| 11132 | 2019-09-16 | 2021-01-01 | -44197 | 2018-07-20 |
有人知道如何解决这个问题吗?提前致谢!
【问题讨论】:
-
“不起作用”是什么意思?实际输出是多少?
-
@LeoE:我把它写到帖子上。问题在于 target_start 列中的 NaT 值
-
如果它解决了问题,请接受它作为答案。谢谢你:)