[英]Pandas : if value in a dataframe contains string from another dataframe, append columns
[英]if string in pandas series contains a string from another pandas dataframe
掙扎的新手。 如果我有兩個熊貓數據框,例如:
import pandas as pd
data = {'col1': ['black sphynx bob','brown labrador','grey labrador mervin',
'brown siamese cat','white siamese']}
desc_df = pd.DataFrame(data=data)
catg = {'dog': ['labrador','rottweiler',
'beagle'],'cat':['siamese','sphynx','ragdoll']}
catg_df = pd.DataFrame(data=catg)
desc_df
col1
0 black spyhnx bob
1 brown labrador
2 grey labrador mervin
3 brown siamese cat
4 white Siamese
catg_df
cat dog
0 siamese labrador
1 sphynx rottweiler
2 ragdoll beagle
我想以desc_df數據框結尾:
col1 col2
0 black spyhnx bob cat
1 brown Labrador dog
2 grey labrador Mervin dog
3 brown siamese cat cat
4 white Siamese cat
我以為我可以將apply方法與功能結合使用。 我只是不是100%確信這是否是解決此問題的最佳方法,以及它是如何實現的。 非常感謝
您可以使用str.contains
+ np.where
desc_df['col2']=np.where(desc_df.col1.str.contains(catg_df.cat.str.cat(sep='|')),'cat','dog')
desc_df
Out[1538]:
col1 col2
0 black spyhnx bob dog
1 brown labrador dog
2 grey labrador mervin dog
3 brown siamese cat cat
4 white siamese cat
確定更新多個條件
d=catg_df.apply('|'.join).to_dict()
desc_df.col1.apply(lambda x : ''.join([z if pd.Series(x).str.contains(y).values else '' for z,y in d.items()]))
Out[1568]:
0
1 dog
2 dog
3 cat
4 cat
Name: col1, dtype: object
一種方法是創建將動物映射為類型的字典。
然后將pd.Series.apply
與next
和一個生成器表達式一起使用:
d = {i: k for k in catg_df for i in catg_df[k].unique()}
desc_df['col2'] = desc_df['col1'].apply(lambda x: next((d.get(i) for i in x.split() \
if i in d), None))
print(desc_df)
# col1 col2
# 0 black sphynx bob cat
# 1 brown labrador dog
# 2 grey labrador mervin dog
# 3 brown siamese cat cat
# 4 white siamese cat
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.