pandas:将数据框中一列的子字符串与另一个数据框列匹配
pandas: match substring from a column in dataframe with another dataframe column
我有两个数据框,如下所示,但行数更多:
data = {'First': [['First', 'value'],['second','value'],['third','value','is'],['fourth','value','is']],
'Second': [['adj','noun'],['adj','noun'],['adj','noun','verb'],['adj','noun','verb']]}
df = pd.DataFrame (data, columns = ['First','Second'])
data2 = {'example': ['First value is important', 'second value is imprtant too','it us goof to know']}
df2 = pd.DataFrame (data2, columns = ['example'])
我编写了一个函数来检查示例列中的第一个单词是否可以在第一个数据帧的第一列中找到,如果为真 return 字符串,如下所示:
def reader():
for l in [l for l in df2.example]:
if df["first"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
然而,我意识到它不起作用,因为 df 中的第一列是一个字符串列表,所以我做了以下修改:
def reader():
for l in [l for l in df2.example]:
df['first_unlist'] = [','.join(map(str, l)) for l in df.First]
if df["first_unlist"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
然而,当我 运行 函数时,我仍然得到 'None',我无法弄清楚这里有什么问题。
更新:
我希望函数 return 示例列中的前两个字符串 'First value is important'、'second value is imprtant too'
当无法找到示例列中的第一个单词时,您的函数不会 return False
。这是修订版。
def reader():
for l in [l for l in df2.example]:
df['first_unlist'] = [','.join(map(str, l)) for l in df.First]
if df["first_unlist"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
return list(df2.example[:2])
reader()
我有两个数据框,如下所示,但行数更多:
data = {'First': [['First', 'value'],['second','value'],['third','value','is'],['fourth','value','is']],
'Second': [['adj','noun'],['adj','noun'],['adj','noun','verb'],['adj','noun','verb']]}
df = pd.DataFrame (data, columns = ['First','Second'])
data2 = {'example': ['First value is important', 'second value is imprtant too','it us goof to know']}
df2 = pd.DataFrame (data2, columns = ['example'])
我编写了一个函数来检查示例列中的第一个单词是否可以在第一个数据帧的第一列中找到,如果为真 return 字符串,如下所示:
def reader():
for l in [l for l in df2.example]:
if df["first"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
然而,我意识到它不起作用,因为 df 中的第一列是一个字符串列表,所以我做了以下修改:
def reader():
for l in [l for l in df2.example]:
df['first_unlist'] = [','.join(map(str, l)) for l in df.First]
if df["first_unlist"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
然而,当我 运行 函数时,我仍然得到 'None',我无法弄清楚这里有什么问题。
更新:
我希望函数 return 示例列中的前两个字符串 'First value is important'、'second value is imprtant too'
当无法找到示例列中的第一个单词时,您的函数不会 return False
。这是修订版。
def reader():
for l in [l for l in df2.example]:
df['first_unlist'] = [','.join(map(str, l)) for l in df.First]
if df["first_unlist"].str.contains(pat=l.split(' ', 1)[0]).any() is True:
return l
return list(df2.example[:2])
reader()