使用logi填写缺失数据

2022-07-06 11:45:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多列和缺少数据的数据帧:

Unit#      Mile        Direction
1 of 2     NaN         NaN
2 of 2     228.7mi     NaN
1 of 2     NaN         NaN
2 of 2     229.7mi     NaN
1 of 2     NaN         NaN
2 of 2     228.7mi     NaN
1 of 3     NaN         NaN
2 of 3     227.7mi     NaN
3 of 3     NaN         NaN

我想做两件事

  1. 填写“英里”列以匹配“x的2”列
  2. 根据“英里”列的方向,在“方向”列中填写“向上”或“向下”。你知道吗

理想的输出是:

Unit#      Mile        Direction
1 of 2     228.7mi     Up
2 of 2     228.7mi     Up
1 of 2     229.7mi     Up
2 of 2     229.7mi     Up
1 of 2     228.7mi     Down
2 of 2     228.7mi     Down
1 of 3     227.7mi     Down
2 of 3     227.7mi     Down
3 of 3     227.7mi     Down

我的主要问题是:

  1. 如何让它知道我要替换哪个单元“1/2”,以及当偶尔出现“3”集时该怎么办
  2. 既然这个数据帧有500000多行,我该如何遍历整个数据集?我最初的想法是一个循环,但这将是非常低效的,需要很长时间。你知道吗

Tags: of数据unitnan方向两件事单元downmiup理想集时directionmile
1条回答
网友
1楼 ·

使用cumcountcumsum,创建组键

s = df.groupby(['Unit#']).cumcount().diff().ne(0).cumsum()
s
Out[606]: 
0    1
1    1
2    2
3    2
4    3
5    3
6    4
7    4
8    4
dtype: int32

然后我们用迈尔做菲娜

df.Mile=df.Mile.groupby(s).apply(lambda x : x.ffill().bfill())

s1=pd.to_numeric(df.Mile.str[:-2]).diff().fillna(1)

df.loc[s1>0,'Direction']='Up'
df.loc[s1<0,'Direction']='Down'
df.Direction=df.Direction.ffill()

***Yield:*** 

df
Out[622]: 
  Unit#     Mile Direction
0  1of2  228.7mi        Up
1  2of2  228.7mi        Up
2  1of2  229.7mi        Up
3  2of2  229.7mi        Up
4  1of2  228.7mi      Down
5  2of2  228.7mi      Down
6  1of3  227.7mi      Down
7  2of3  227.7mi      Down
8  3of3  227.7mi      Down