使用条件使用同一列中的上一个字符串填充空值

问题描述

我有一列上缺少值的数据框,我试图用同一列中的前一个字符串填充这些丢失的值,但考虑到另一列==某物。 [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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...