我需要基于col1中的字符串填充数据文件中的col2,例如:
Out[]:
Col2 Col1
0 SAP SAP
1 Oracle Oracle
2 N/A
3 SAP SAP
4 SF Salesforce 代码可以工作,但是col1有不属于的值,因为col2是空的。(见第3行)
Out[]:
Col2 Col1
0 SAP SAP
1 Oracle Oracle
2 Oracle
3 SAP SAP
4 SF Salesforce 尝试添加一个pd.np.where(df[column2]str.contains(""), "Empty")
但是,所有的column1都充满了“空”,它忽略了其余的。
这是我的密码:
DF['Col1']= pd.np.where(DF['Col2'].str.contains('Oracle'), 'Oracle',
pd.np.where(DF['Col2'].str.contains('SAP'), 'SAP',
pd.np.where(DF['Col2'].str.contains('SF'), 'Salesforce', 'N/A')))预期产出如下:
Out[]:
Col2 Col1
0 SAP SAP
1 Oracle Oracle
2 N/A
3 SAP SAP
4 SF Salesforce 发布于 2019-09-10 17:24:55
现在得到你所展示的数据框架,我有了一个公平的想法,用我的方式去做,也许会有更好的添加。
正如您在注释部分中所显示的,原始DataFrame:
>>> df
Catagory MGA
0 Oracle IPS Oracle
1 SAP IPS FICA Module Oracle
2 Oracle
3 SAAP IPS MM Module Oracle
4 SF Lightning Oracle因此,您可以在Catagory列上使用Catagory方法,方法是将它们拆分为空格分隔符,这将进一步创建四个新列,并且因为您正在寻找来自Catagory列的初始值,这些值将落在必须选择的列0中。
>>> df['Catagory'].str.split(' ', expand=True)
0 1 2 3
0 Oracle IPS None None
1 SAP IPS FICA Module
2 None None None
3 SAAP IPS MM Module
4 SF Lightning None None正如您在上面看到的,列0仍然有一个空单元格,我们将使用replace()方法,但是,您正在将另一个值SF转换为Salesforce,因此也需要替换它,因此,我将使用带有replace的dict方法一次实现这两种方法。
解决方案:
vals = {'':'Non-MGA', 'SF':'Salesforce'}
>>> df = df.assign(MGA_NEW=df['Catagory'].str.split(' ', expand=True)[0].replace(vals)).drop(columns={'MGA'})
>>> df
Catagory MGA_NEW
0 Oracle IPS Oracle
1 SAP IPS FICA Module SAP
2 Non-MGA
3 SAAP IPS MM Module SAAP
4 SF Lightning Salesforce由于我们不需要从split()生成的其他列,所以我删除了它们,并使用assign()方法将值赋值给新列MGA_NEW,并最终删除了不需要的原始列MGA。
如果您想再次保留列名MGA,可以这样做。
>>> df.rename(columns={'MGA_NEW':'MGA'}, inplace=True)
>>> df
Catagory MGA
0 Oracle IPS Oracle
1 SAP IPS FICA Module SAP
2 Non-MGA
3 SAAP IPS MM Module SAAP
4 SF Lightning Salesforce希望这能帮上忙!
发布于 2019-09-10 17:30:46
而不是使用str.contains(""),您可以考虑使用regex。下面的代码使用regex将整个dataframe中的所有空字符串替换为单词"Empty“:
df.replace(r'^\s*$', 'Empty', regex=True, inplace=True)https://stackoverflow.com/questions/57875479
复制相似问题