所以我有一个像这样的数据框
date people flight
0 04/12/61 1 Vostok 1
1 04/15/61 0 Vostok 2
2 05/04/61 0 none
3 05/05/61 1 Freedom 7
4 05/09/61 0 none
5 07/20/61 0 none
我想在排期结束并转到另一个排期/或不排空的值之间输入另一行。该行的日期应该是更改后的值的前一天(并且保留航班的 名称 和 人数 ,所以最终日期看起来像这样:
0 04/12/61 1 Vostok 1
1 04/14/61 1 Vostok 1
2 04/15/61 0 Vostok 2
3 05/04/61 0 none
4 05/05/61 1 Freedom 7
5 05/08/61 1 Freedom 7
6 05/09/61 0 none
7 07/20/61 0 none
很抱歉,您遇到了非常具体的问题,但我们将不胜感激!
答案 0 :(得分:0)
IIUC
df.replace({0:np.nan,'none':np.nan}).bfill(limit=1).fillna({'people':0,'flight':'none'})
Out[19]:
date people flight
0 04/12/61 1.0 Vostok1
1 04/13/61 0.0 none
2 05/04/61 1.0 Freedom7
3 05/05/61 1.0 Freedom7
4 05/09/61 0.0 none
5 07/20/61 0.0 none
更新
df.date=pd.to_datetime(df.date)
sdx=df.index[df.people.eq(1)]
tempdf=pd.DataFrame({'date':(df.loc[sdx,'date']-pd.to_timedelta('1 days')).values,'people':df.loc[sdx,'people'].values,'flight':df.loc[sdx,'flight'].values
},index=sdx+1)
pd.concat([df,tempdf]).sort_values('date').sort_index()
date flight people
0 2061-04-12 Vostok1 1
1 2061-04-11 Vostok1 1
1 2061-04-15 Vostok2 0
2 2061-05-04 none 0
3 2061-05-05 Freedom7 1
4 2061-05-04 Freedom7 1
4 2061-05-09 none 0
5 2061-07-20 none 0
答案 1 :(得分:0)
我看到您还有一个整数索引。将其设置为一列(added_column)。然后创建另一个与原始数据帧相同的数据帧。
df_copy = df.copy()
在df_copy中将索引增加1
df_copy["added_column"] += 1
使用added_column连接df和df_copy,使用后缀(_original和_copy)将列与原始数据帧和复制的数据帧区分开。让我们将结果称为df_merged。
如果我的理解是正确的,则要包含在数据框中的记录如下(您还必须将date_copy减少一天):
df_merged [df_merged.flight.notnull()] [[date_copy,people_original,flight_original]]