问题描述
我有一列上缺少值的数据框,我试图用同一列中的前一个字符串填充这些丢失的值,但考虑到另一列==某物。 [image] [1]
例如,我只想为其中Business Unit ='GTI Shared S2D'的那些行填充“名称”下的缺失值和上一个字符串
假设我们有一个像这样的数据框
名称部件大小(GB)业务单位
579 srv005831 120.0 GTI共享S2D
580 Nan 50.0 GTI共享S2D
581 Nan 30.0 GTI共享S2D
582 srv000711 120.0 GTI共享S2D
583 Nan 50.0 GTI共享S2D
584 Nan 20呼叫中心
输出应如下所示
名称部件大小(GB)业务单位
[(1003,'C:\\dd\\ggg')]
579 srv005831 120.0 GTI共享S2D
580 srv005831 50.0 GTI共享S2D
581 srv005831 30.0 GTI共享S2D
582 srv000711 120.0 GTI共享S2D
583 srv000711 50.0 GTI共享S2D
584 Nan 20呼叫中心
[1]:https://i.stack.imgur.com/GZM0D.jpg
解决方法
您可以使用ffill()
:
x[x['Business Unit'] == 'GTI Shared S2D']['Name'].ffill()
以df为例:
In [331]: df = pd.DataFrame({'Name':['srv005831','srv005632',np.nan,np.nan],'Part Size(GB)':[120.0,50.0,30.0,120.0],'Business Unit':['GTI Shared S2D','Call Center','GTI Shared S2D','GTI Shared S2D']})
In [332]: df
Out[332]:
Name Part Size(GB) Business Unit
0 srv005831 120.0 GTI Shared S2D
1 srv005632 50.0 Call Center
2 NaN 30.0 GTI Shared S2D
3 NaN 120.0 GTI Shared S2D
我的代码运行良好:
In [339]: ix = df[df['Business Unit'] == 'GTI Shared S2D'].index.tolist()
In [346]: df.loc[ix] = df.loc[ix]['Name'].ffill()
In [347]: df
Out[347]:
Name Part Size(GB) Business Unit
0 srv005831 srv005831 srv005831
1 srv005632 50 Call Center
2 srv005831 srv005831 srv005831
3 srv005831 srv005831 srv005831