首页 > 解决方案 > 满足条件时如何根据id在2个数据帧之间建立连接?

问题描述

我正在尝试根据来自另一个数据帧的关键字从一个数据帧中提取句子,我工作得很好,但是我有另一个数据帧用于另一种语言的相同句子,但顺序和 ID 相同,所以我想从其他数据帧以及基于第一个匹配 ID 的数据帧是否可行?我正在尝试的代码是这个


wdata = pd.read_csv(firstfile, nrows=0).columns[0]
skip = int(wdata.count(' ') == 0)
wdata = pd.read_csv(firstfile, names=['sentences'], skiprows=skip)

data = wdata['sentences'].str.replace('[^\w\s]', ' ')

tdata = pd.read_csv(secondfile, nrows=0).columns[0]
skip = int(tdata.count(' ') == 0)
tdata = pd.read_csv(secondfile, names=['sentences'], skiprows=skip)

sata = tdata['sentences'].str.replace('[^\w\s]', ' ')


keywords=pd.read_csv(dic)

keywords=keywords.loc[keywords['freq'].between(200, 2499, inclusive=False), 'word']


newdata = data[data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]


update = data[~data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]


newdata.to_csv("new_data.csv", index=False, header=False)

update.to_csv("update.csv", index=False, header=False)

----------------------
#first dataframe example 
----------------------
#how are you 
#I want to die
#I was home
#I went to sleep at work
#he have a bad reputation
#it was me who went to him 
#have  good sleep home

----------------------
#second  dataframe example 
----------------------
#halaw kuy bashii
#damawe bmrm 
#la malawa bum
#la esh nustm 
#aw kabraya bash nya 
#awa mn bum chum bo lay
#xaweki xosh basar bba la malawa 


----------------------
#the keyward example example 
----------------------
#word   freq
#and    500
#you    450
#me 300
#have   250
#your   240
#sleep  200
#work   150
#home   100
#die    50

现在这段代码可以很好地从第一个数据帧中给我想要的句子,但是我如何分配它,以便根据匹配的 ID 从第二个数据帧中获取句子,例如条件为真并且它从数据帧中获取第一句话1 到一个新的 csv 文件,然后将数据帧中的第一个也放入一个单独的 csv 中,依此类推

这是我得到的代码

在此处输入图像描述

我想根据满足的第一个数据帧条件获得相同的 ID,并将其转储到新的 csv 中以用于第二个数据帧,以便输出

在此处输入图像描述

标签: pythonpandasdataframe

解决方案


如果两个 DataFrame 的行数和索引相同,则可以将掩码从第一个传递DataFrame到第二个,例如:

print (data.index.equals(df2.index))
True

newdata2 = df2[data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (newdata2)
                           sentences
0                   halaw kuy bashii
4               aw kabraya bash nya 
5             awa mn bum chum bo lay
6  xaweki xosh basar bba la malawa 1

如果要按索引匹配:

newdata = data[data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (newdata)
0                  how are you 
4      he have a bad reputation
5    it was me who went to him 
6         have  good sleep home
Name: sentences, dtype: object

newdata2 = df2[df2.index.isin(newdata.index)]
print (newdata2)
                           sentences
0                   halaw kuy bashii
4               aw kabraya bash nya 
5             awa mn bum chum bo lay
6  xaweki xosh basar bba la malawa 1

推荐阅读