有兩個具有相同列的資料框,我想創建一個具有列之間差異的結果資料框,同時考慮到資料框有很多列(和行)。
我猜這個方法是先做一個內部連接,然后做一個“WithColumn” ,里面有一個減法,但我不知道如何以自動化的方式為很多列做到這一點。
例子:
第一個資料框:
ID | col1 | col2 | col3 | ... | colXX |
---|---|---|---|---|---|
1 | 1.1 | 1.2 | 1.6 | ... | 1.8 |
第二個資料框:
ID | col1 | col2 | col3 | ... | colXX |
---|---|---|---|---|---|
1 | 1.2 | 1.2 | 2.1 | ... | 2.1 |
預期的資料框:
ID | diff_col1 | diff_col2 | diff_col3 | ... | diff_colXX |
---|---|---|---|---|---|
1 | 0.1 | 0.0 | 0.5 | ... | 0.3 |
預先感謝!
uj5u.com熱心網友回復:
首先準備差異的選擇,然后將其應用于連接的結果資料幀。
val selection =
df1.columns.diff(Seq("Id"))
.map(x => (col(s"df1.$x") - col(s"df2.$x")) as s"diff_$x")
val query =
df1.as("df1")
.join(df2.as("df2"), Seq("Id"), "inner")
.select((Seq(col("df1.Id")) selection):_*)
請注意連接中資料幀上的別名與差異計算中使用的名稱匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/508571.html