У меня есть два фрейма данных, и я хочу вставить строки из фрейма данных df2 в df1, если значение из столбца «A» в df1 содержится в ячейке столбца «B» в df2.Если это так, то я хочу вставить строки ниже соответствующего значения из столбца «A» в df1.Строки, которые необходимо вставить, извлекаются из df2 на основе столбца «Ключевое слово» таким образом, что у меня есть строки от одного «теста» в столбце «Ключевое слово» до следующего «теста».
Это данныеframe:
df1
A Keyword B C
m55 m32\nm83\nm18 123
m56 m12 546
m68
m32
m83
m65
m73 m77\nm78 558
m23
m98
m77
m18
m4
m12
m78
У меня есть второй фрейм данных (df2), из которого я извлекаю строки и вставляю в df1.Я извлекаю строки из «test» в «test» в столбце «Ключевое слово».
df2
Keyword Matches C
test m32\nm83\nm18 123
something
something
something
test
something
something
test m12 546
something
test m77\nm78 558
test
something
Итак, в конце мне нужно это:
df1
A Keyword B C
m55 m32\nm83\nm18 123
m56 m12 546
m68
m32
test m32\nm83\nm18 123
something
something
something
m83
test m32\nm83\nm18 123
something
something
something
m65
m73 m77\nm78 558
m23
m98
m77
test m77\nm78 558
m18
test m32\nm83\nm18 123
something
something
something
m4
m12
test m12 546
something
m78
test m77\nm78 558
Как это сделать?
РЕДАКТИРОВАТЬ:
Сначала у меня есть эта функция:
def insert_row(idx, df, df_insert):
return df.iloc[:idx, ].append(df_insert).append(df.iloc[idx:, ]).reset_index(drop = True)
, а затем я создал функциючтобы извлечь строки из df2:
def TestStepsReturn(df, SearchingElement):
TestCaseList = df.index[df["Keyword"] == "test"].tolist()
TestCaseList = np.asarray(TestCaseList)
try:
idx = TestCaseList[TestCaseList <= df.index[df["Matches"].str.contains(SearchingElement)][0]].max()
idx = np.where(TestCaseList == idx)
if idx[0][0]!=(len(TestCaseList)-1):
return df.loc[TestCaseList[idx[0][0]]:TestCaseList[idx[0][0]+1]-1]
return df.loc[TestCaseList[idx[0][0]]:]
except:
return pd.DataFrame(columns=df.columns)#return the empty data frame with the same columns names
, а затем я создал еще один, который использует TestStepsReturn:
def SerchIDs(dfFidx, df1, df2, SearchingColumn):
for feature in dfFidx:
feature += i
df_new = TestStepsReturn(df2, df1.loc[feature, SearchingColumn])#
df1 = insert_row(feature+1, df1, df_new)
i += int(df_new.size/len(df_new.columns.values))
return df
, а затем у меня есть код:
dfFidx = df1.index
df1 = SerchIDs(dfFidx, df1, df2, "A")