Join_where с start_with в полярахPython

Программы на Python
Ответить
Anonymous
 Join_where с start_with в полярах

Сообщение Anonymous »

У меня есть два фрейма данных

Код: Выделить всё

df = pl.DataFrame({'url': ['https//abc.com', 'https//abcd.com', 'https//abcd.com/aaa', 'https//abc.com/abcd']})

Код: Выделить всё

conditions_df = pl.DataFrame({'url': ['https//abc.com', 'https//abcd.com', 'https//abcd.com/aaa', 'https//abc.com/aaa'], 'category': [['a'], ['b'], ['c'], ['d']]})
теперь мне нужен df для назначения категорий первому df на основе первого совпадения, поскольку URL-адрес начинается со второго df, то есть результат должен быть таким:



url
категория




https//abc.com
['a']< /td>


https//abcd.com
['b']


https//abcd.com/aaa
['b'] — этот начинается с https//abcd.com, это первое совпадение


https//abc.com/abcd
['a'] — это начинается с https//abc.com, это первый match



текущий код, который работает, выглядит так,

Код: Выделить всё

def add_category_column(df: pl.DataFrame, conditions_df) -> pl.DataFrame:
    
    # Initialize the category column with empty lists
    df = df.with_columns(pl.Series("category", [[] for _ in range(len(df))], dtype=pl.List(pl.String)))
    
    # Apply the conditions to populate the category column
    for row in conditions_df.iter_rows():
        url_start, category = row
        df = df.with_columns(
            pl.when(
                (pl.col("url").str.starts_with(url_start)) & (pl.col("category").list.len() == 0)
            )
            .then(pl.lit(category))
            .otherwise(pl.col("category"))
            .alias("category")
        )
    
    return df
но есть ли способ добиться того же без использования циклов for, можем ли мы использовать здесь join_where, но в моих попытках join_where не работает для start_with


Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-polars
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»