Python 使用条件用同一列中的前一个字符串填充空值
我有一个dataframe,其中一列上缺少值,我试图用同一列中的前一个字符串填充这些缺少的值,但假设另一列==某个值。[图片][1] 例如,我只想为Business Unit='GTI Shared S2D'所在的行用前面的字符串填充'Name'下缺少的值 假设我们有这样一个数据帧Python 使用条件用同一列中的前一个字符串填充空值,python,python-3.x,pandas,dataframe,fillna,Python,Python 3.x,Pandas,Dataframe,Fillna,我有一个dataframe,其中一列上缺少值,我试图用同一列中的前一个字符串填充这些缺少的值,但假设另一列==某个值。[图片][1] 例如,我只想为Business Unit='GTI Shared S2D'所在的行用前面的字符串填充'Name'下缺少的值 假设我们有这样一个数据帧 名称零件尺寸(GB)业务单位 579 srv005831 120.0 GTI共享S2D 580 Nan 50.0 GTI共享S2D 581 Nan 30.0 GTI共享S2D 582 srv000711 120.0
名称零件尺寸(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南20呼叫中心
输出应如下所示
名称零件尺寸(GB)业务单位
579 srv005831 120.0 GTI共享S2D580 srv005831 50.0 GTI共享S2D
581 srv005831 30.0 GTI共享S2D
582 srv000711 120.0 GTI共享S2D
583 srv000711 50.0 GTI共享S2D
584南20呼叫中心
[1] :您可以使用
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
您好,我试过了,但是所有其他业务单位不等于Nan的值现在都是NanCan。您可以共享一个具有预期输出的数据帧样本。@KhutsoMphelo请参考我在回答中添加的示例。我已经编辑了问题,请检查以获取预期输出
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