Как я могу проверить значение из ячейки столбца «B» (оно может содержать несколько строк), находится ли оно в столбце «A», и если оно есть, вставляет строку отверстия (например, в которой у меня есть значения m32 \ nm83 \ nm18) ниже строки, в которой совпадение найдено в столбце «A» (например, m32)?
Это кадр данных:
df
A 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
И это то, чтоЯ хочу получить:
df
A B C
m55 m32\nm83\nm18 123
m56 m12 546
m68
m32
m55 m32\nm83\nm18 123
m83
m55 m32\nm83\nm18 123
m65
m73 m77\nm78 558
m23
m98
m77
m73 m77\nm78 558
m18
m55 m32\nm83\nm18 123
m4
m12
m56 m12 546
m78
m73 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)
dfB = dfB[dfB.apply(lambda x: isinstance(x, str))]
dfBidx = dfB.index
j=0
for b in dfBidx:
try:
idx = df.index[df["A"].apply(lambda x: isinstance(x, str)).str.contains("|".join(dfB[b].split("\n")))]
for i in idx:
i+=j
df_new = df.loc[i]
df = insert_row(i+j+1, df, df_new)
j+= int(df_new.size/len(df_new.columns.values))
except:
pass
Это какой-то другой способ сделать это?У меня есть проблема со значениями NaN в столбце «А», и, как правило, есть некоторые несоответствия в использовании функций:
str (), содержит (), apply ()
РЕДАКТИРОВАТЬ:
У меня есть второй кадр данных (df2), из которого я извлекаю строки и вставляю в df.Я извлекаю строки из «test» в «test» в столбце «Ключевое слово».
df2
Keyword B C
test m32\nm83\nm18 123
something
something
something
test
something
something
test m12 546
something
test m77\nm78 558
test
something
Итак, в конце мне нужно это:
дф
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