Я хочу сохранить строки dataframe df, если строки «b» содержат строки «b2» из dataframe df2
import pandas as pd
d = {'a': [100, 125, 300, 235], 'b': ["abc","ghf" "dfg", "hij"]}
df = pd.DataFrame(data=d, index=[1, 2, 3, 4])
print(df)
a b
1 100 abc
2 125 ghf
3 300 dfg
4 235 hij
d2 = {'a2': [10, 25, 30], 'b2': ["bc", "fg", "op"]}
df2 = pd.DataFrame(data=d2, index=[1, 2, 3])
print(df2)
a2 b2
1 10 bc
2 25 fg
3 30 op
Вывод должен выглядеть так:
a b
1 100 abc
2 300 dfg
Я пробовал следующее, но это не сработало.
for majstring in df.b:
for substring in set(df2.b2):
if substring in majstring:
pass
else:
df.drop(df.loc[df['b'] == majstring], inplace=True)
Попробуй это:
mask = sum([df['b'].str.contains(v) for v in df2['b2']]).astype(bool)
filtered_df = df[mask]
Выход:
>>> filtered_df
a b
1 100 abc
3 300 dfg
Спасибо за ваш ответ! Однако это решение не работает, если первый фрейм данных df длиннее второго кадра данных df2. Кроме того, порядок значений в df2 не должен иметь значения: я просто хочу проверить, есть ли какие-либо строки b2 в b, и если да, то сохранить эти строки. Извините, за путаницу, я должен был уточнить это.
Не могли бы вы добавить образец фрейма данных, который не работает, к вопросу? :)
по индексу или что-то связанное с
a
илиa2
? Или это просто строкиdf
есть лиb2
в «b»?