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)
...但这仅返回一列,而我丢失了原来的三列。我知道如果可能的话,也不建议对极地人士采用这种方法。
如何跨多个数据帧列执行字符串格式化,并将输出列附加到原始数据帧?
另一种选择是使用polars.format它来创建字符串。例如:
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)\nRun Code Online (Sandbox Code Playgroud)\nshape: (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\nRun Code Online (Sandbox Code Playgroud)\n