我有資料框 df1 像這樣:
Schema table Name temp
0 schema1 table1 col1 INT(1,2) NOT NULL
1 schema1 table1 col2 INT(3,2) NOT NULL
2 schema1 table1 col3 SMALLINT(6,2) NULL
3 schema1 table1 col4 SMALLINT(9,2) NULL
4 schema2 table2 col6 CHAR(20,2) NULL
5 schema2 table2 col7 CHAR(20,4) NULL
6 schema2 table2 col8 CHAR(6,5) NULL
7 schema2 table2 col9 CHAR(6,3) NULL
在這個資料框中,我有兩個不同的模式和表(table1和table2)。我想以此建立create table宣告。
因此,從上面的資料框中,我需要一個新的資料框,它將有 2 行(因為 df1 中有 2 個不同的表),值將是
df2:
ddl_statement
0 create table schema1.table1 (col1 INT(1,2) NOT NULL,col2 INT(3,2) NOT NULL,col3_Nbr SMALLINT(6,2) NULL,col4 SMALLINT(9,2) NULL)
1 create table schema2.ITEM_DESC2 (col6 CHAR(20,2) NULL,col7 CHAR(20,4) NULL,Col8 CHAR(6,5) NULL,col9 CHAR(6,3) NULL)
我怎樣才能在不使用回圈的情況下實作這一點?
uj5u.com熱心網友回復:
使用groupby和 f 字串:
df2 = df.groupby(['Database/Schema Name', 'entity Name'])['temp'] \
.apply(lambda x: f"create table {x.name[0]}.{x.name[1]} ({', '.join(x)})") \
.reset_index(drop=True).to_frame('ddl_statement')
輸出:
>>> df2
ddl_statement
0 create table schema1.ITEM_DESC1 (Item_Nbr INT(1,2) NOT NULL, Old_Nbr INT(3,2) NOT NULL, Order_Dept_Nbr SMALLINT(6,2) NULL, Acct_Dept_Nbr SMALLINT(9,2) NULL)
1 create table schema2.ITEM_DESC2 (Primary_Desc CHAR(20,2) NULL, Secondary_Desc CHAR(20,4) NULL, Color_Desc CHAR(6,5) NULL, Size_Desc CHAR(6,3) NULL)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412117.html
標籤:
下一篇:如何從資料框中獲取列的最后一個值
