Polars 使用字符串格式创建列

Ove*_*ass 2 python python-polars

我有一个极地数据框:

df = pl.DataFrame({'schema_name': ['test_schema', 'test_schema_2'], 
                       'table_name': ['test_table', 'test_table_2'],
                       'column_name': ['test_column, test_column_2','test_column']})
Run Code Online (Sandbox Code Playgroud)
架构名称 表名 列名
测试模式 测试表 测试列、测试列2
测试模式_2 测试表_2 测试列

我有一个字符串:

date_field_value_max_query = '''
    select '{0}' as schema_name, 
           '{1}' as table_name, 
           greatest({2})
    from {0}.{1}
    group by 1, 2
'''
Run Code Online (Sandbox Code Playgroud)

我想使用极坐标通过字符串格式添加列。目标数据框是这样的:

架构名称 表名 列名 询问
测试模式 测试表 测试列、测试列2 从 test_schema.test_table 组中选择 test_schema、test_table、maximum(test_column、test_column_2) by 1, 2
测试模式_2 测试表_2 测试列 从 test_schema_2.test_table_2 分组中选择 test_schema_2、test_table_2、maximum(test_column) by 1, 2

在 pandas 中,我会做这样的事情:

df.apply(lambda row: date_field_value_max_query.format(row['schema_name'], row['table_name'], row['column_name']), axis=1)
Run Code Online (Sandbox Code Playgroud)

对于极地,我尝试了以下方法:

df.with_column(
    (date_field_value_max_query.format(pl.col('schema_name'), pl.col('table_name'), pl.col('column_name')))
)
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为with_column需要单个表达式。通过这样做我可以获得我想要的输出......

df.apply(lambda row: date_field_value_max_query.format(row[0], row[1], row[2]))
Run Code Online (Sandbox Code Playgroud)

...但这仅返回一列,而我丢失了原来的三列。我知道如果可能的话,也不建议对极地人士采用这种方法。

如何跨多个数据帧列执行字符串格式化,并将输出列附加到原始数据帧?

ΩΠΟ*_*ΝΟΣ 5

另一种选择是使用polars.format它来创建字符串。例如:

\n
date_field_value_max_query = (\n\'\'\'select {} as schema_name,\n       {} as table_name,\n       greatest({})\n    from {}.{}\n    group by 1, 2\n\'\'\'\n)\n\n(\n    df\n    .with_columns([\n        pl.format(date_field_value_max_query,\n                  \'schema_name\',\n                  \'table_name\',\n                  \'column_name\',\n                  \'schema_name\',\n                  \'table_name\')\n    ])\n)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (2, 4)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 schema_name   \xe2\x94\x86 table_name   \xe2\x94\x86 column_name                \xe2\x94\x86 literal                                     \xe2\x94\x82\n\xe2\x94\x82 ---           \xe2\x94\x86 ---          \xe2\x94\x86 ---                        \xe2\x94\x86 ---                                         \xe2\x94\x82\n\xe2\x94\x82 str           \xe2\x94\x86 str          \xe2\x94\x86 str                        \xe2\x94\x86 str                                         \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 test_schema   \xe2\x94\x86 test_table   \xe2\x94\x86 test_column, test_column_2 \xe2\x94\x86 select test_schema as schema_name,          \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86        test_table as table_name,            \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86        greatest(test_column, test_column_2) \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86     from test_schema.test_table             \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86     group by 1, 2                           \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86                                             \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86                                             \xe2\x94\x82\n\xe2\x94\x82 test_schema_2 \xe2\x94\x86 test_table_2 \xe2\x94\x86 test_column                \xe2\x94\x86 select test_schema_2 as schema_name,        \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86        test_table_2 as table_name,          \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86        greatest(test_column)                \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86     from test_schema_2.test_table_2         \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86     group by 1, 2                           \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86                                             \xe2\x94\x82\n\xe2\x94\x82               \xe2\x94\x86              \xe2\x94\x86                            \xe2\x94\x86                                             \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n