[英]str.contains based on another column is returning values for empty strings
我需要基於col2中的字符串填充數據幀中的col1,例如:
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的所有字段都用“ Empty”填充,而忽略其余的字段。
這是我的代碼:
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
現在獲得了您顯示的數據框,我有了以自己的方式進行操作的不錯的主意,不過可能會有更好的添加。
>>> 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
所以,你可以使用str.split()
方法的Catagory
由空間分隔符,這將進一步創建4分新列既然你正在尋找從起點值,分裂他們列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
希望這會有所幫助!
您可以考慮使用regex而不是使用str.contains("")
。 以下代碼使用正則表達式將整個數據框中的所有空字符串替換為單詞“ Empty
”:
df.replace(r'^\s*$', 'Empty', regex=True, inplace=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.