danfo.merge
Merge DataFrame or named Series objects with a database-style join.The join is done on columns or indexes.
danfo.merge(kwargs) [source]
Parameters
Type
Description
Default
kwargs
Object
{
left: A DataFrame or named Series object.
right: Another DataFrame or named Series object.
on: Column names to join on. Must be found in both the left and right DataFrame and/or Series objects.
how: One of 'left','right','outer', 'inner'. Defaults to 'inner'
}
{how: inner}
Returns:
return DataFrame

Examples

danfo.js merge function is similar to Pandas merge and performs in-memory join operations idiomatically very similar to relational databases like SQL.
danfo.js provides a single function, merge(), as the entry point for all standard database join operations between DataFrame or named Series objects.
For a more intuitive understanding, this guide on the Pandas doc is worth reading.

Merging by a single key found in both axis

By default, danfo performs inner join. An inner join requires each row in the two joined DataFrames to have matching column values. This is similar to the intersection of two sets. It returns a DataFrame with only those rows that have common characteristics.
Node
Browser
1
const dfd = require("danfojs-node")
2
3
4
let data = [['K0', 'k0', 'A0', 'B0'], ['k0', 'K1', 'A1', 'B1'],
5
['K1', 'K0', 'A2', 'B2'], ['K2', 'K2', 'A3', 'B3']]
6
7
let data2 = [['K0', 'k0', 'C0', 'D0'], ['K1', 'K0', 'C1', 'D1'],
8
['K1', 'K0', 'C2', 'D2'], ['K2', 'K0', 'C3', 'D3']]
9
10
let colum1 = ['Key1', 'Key2', 'A', 'B']
11
let colum2 = ['Key1', 'Key2', 'A', 'D']
12
13
let df1 = new dfd.DataFrame(data, { columns: colum1 })
14
let df2 = new dfd.DataFrame(data2, { columns: colum2 })
15
df1.print()
16
df2.print()
17
18
let merge_df = dfd.merge({ "left": df1, "right": df2, "on": ["Key1"]})
19
merge_df.print()
Copied!
1
Copied!
Output
1
2
//first DataFrame
3
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
4
║ │ Key1 │ Key2 │ A │ B ║
5
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
6
║ 0 │ K0 │ k0 │ A0 │ B0 ║
7
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
8
║ 1 │ k0 │ K1 │ A1 │ B1 ║
9
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
10
║ 2 │ K1 │ K0 │ A2 │ B2 ║
11
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
12
║ 3 │ K2 │ K2 │ A3 │ B3 ║
13
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
14
15
16
//Second DataFrame
17
18
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
19
║ │ Key1 │ Key2 │ A │ D ║
20
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
21
║ 0 │ K0 │ k0 │ C0 │ D0 ║
22
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
23
║ 1 │ K1 │ K0 │ C1 │ D1 ║
24
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
25
║ 2 │ K1 │ K0 │ C2 │ D2 ║
26
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
27
║ 3 │ K2 │ K0 │ C3 │ D3 ║
28
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
29
30
31
//After inner join on column 'Key1'
32
33
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
34
║ │ Key1 │ Key2 │ A │ B │ Key2_1 │ A_1 │ D ║
35
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
36
║ 0 │ K0 │ k0 │ A0 │ B0 │ k0 │ C0 │ D0 ║
37
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
38
║ 1 │ K1 │ K0 │ A2 │ B2 │ K0 │ C1 │ D1 ║
39
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
40
║ 2 │ K1 │ K0 │ A2 │ B2 │ K0 │ C2 │ D2 ║
41
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
42
║ 3 │ K2 │ K2 │ A3 │ B3 │ K0 │ C3 │ D3 ║
43
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
44
Copied!

Inner Join/Merge by multiple keys found in both axis

Merging by two keys takes into consideration the keys appearing in bothleft and right DataFrame.
Node
Browser
1
2
const dfd = require("danfojs-node")
3
4
5
let data = [['K0', 'k0', 'A0', 'B0'], ['k0', 'K1', 'A1', 'B1'],
6
['K1', 'K0', 'A2', 'B2'], ['K2', 'K2', 'A3', 'B3']]
7
8
let data2 = [['K0', 'k0', 'C0', 'D0'], ['K1', 'K0', 'C1', 'D1'],
9
['K1', 'K0', 'C2', 'D2'], ['K2', 'K0', 'C3', 'D3']]
10
11
let colum1 = ['Key1', 'Key2', 'A', 'B']
12
let colum2 = ['Key1', 'Key2', 'A', 'D']
13
14
let df1 = new dfd.DataFrame(data, { columns: colum1 })
15
let df2 = new dfd.DataFrame(data2, { columns: colum2 })
16
df1.print()
17
df2.print()
18
19
let merge_df = dfd.merge({ left: df1, right: df2,
20
on: ["Key1", 'Key2'], how: "inner"})
21
merge_df.print()
Copied!
1
Copied!
Output
1
//first DataFrame
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Key1 │ Key2 │ A │ B ║
4
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
5
║ 0 │ K0 │ k0 │ A0 │ B0 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
7
║ 1 │ k0 │ K1 │ A1 │ B1 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
9
║ 2 │ K1 │ K0 │ A2 │ B2 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
11
║ 3 │ K2 │ K2 │ A3 │ B3 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
//second DataFrame
16
17
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
18
║ │ Key1 │ Key2 │ A │ D ║
19
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
20
║ 0 │ K0 │ k0 │ C0 │ D0 ║
21
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
22
║ 1 │ K1 │ K0 │ C1 │ D1 ║
23
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
24
║ 2 │ K1 │ K0 │ C2 │ D2 ║
25
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
26
║ 3 │ K2 │ K0 │ C3 │ D3 ║
27
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
28
29
30
//After inner join on two keys
31
32
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
33
║ │ Key1 │ Key2 │ A │ B │ A_1 │ D ║
34
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
35
║ 0 │ K0 │ k0 │ A0 │ B0 │ C0 │ D0 ║
36
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
37
║ 1 │ K1 │ K0 │ A2 │ B2 │ C1 │ D1 ║
38
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
39
║ 2 │ K1 │ K0 │ A2 │ B2 │ C2 │ D2 ║
40
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
41
Copied!
The how parameter takes other types of joins like left, right and outer join and these are similar to their SQL equivalent

Outer join/merge on DataFrame

Node
Browser
1
const dfd = require("danfojs-node")
2
3
4
let data = [['K0', 'k0', 'A0', 'B0'], ['k0', 'K1', 'A1', 'B1'],
5
['K1', 'K0', 'A2', 'B2'], ['K2', 'K2', 'A3', 'B3']]
6
7
let data2 = [['K0', 'k0', 'C0', 'D0'], ['K1', 'K0', 'C1', 'D1'],
8
['K1', 'K0', 'C2', 'D2'], ['K2', 'K0', 'C3', 'D3']]
9
10
let colum1 = ['Key1', 'Key2', 'A', 'B']
11
let colum2 = ['Key1', 'Key2', 'A', 'D']
12
13
let df1 = new dfd.DataFrame(data, { columns: colum1 })
14
let df2 = new dfd.DataFrame(data2, { columns: colum2 })
15
df1.print()
16
df2.print()
17
18
let merge_df = dfd.merge({ left: df1, right: df2,
19
on: ["Key1"], how: "outer"})
20
merge_df.print()
Copied!
1
Copied!
Output
1
//First DataFrame
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Key1 │ Key2 │ A │ B ║
4
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
5
║ 0 │ K0 │ k0 │ A0 │ B0 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
7
║ 1 │ k0 │ K1 │ A1 │ B1 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
9
║ 2 │ K1 │ K0 │ A2 │ B2 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
11
║ 3 │ K2 │ K2 │ A3 │ B3 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
//Second DataFrame
16
17
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
18
║ │ Key1 │ Key2 │ A │ D ║
19
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
20
║ 0 │ K0 │ k0 │ C0 │ D0 ║
21
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
22
║ 1 │ K1 │ K0 │ C1 │ D1 ║
23
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
24
║ 2 │ K1 │ K0 │ C2 │ D2 ║
25
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
26
║ 3 │ K2 │ K0 │ C3 │ D3 ║
27
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
28
29
//After outer join
30
31
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
32
║ │ Key1 │ Key2 │ A │ B │ Key2_1 │ A_1 │ D ║
33
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
34
║ 0 │ K0 │ k0 │ A0 │ B0 │ k0 │ C0 │ D0 ║
35
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
36
║ 1 │ k0 │ K1 │ A1 │ B1 │ NaN │ NaN │ NaN ║
37
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
38
║ 2 │ K1 │ K0 │ A2 │ B2 │ K0 │ C1 │ D1 ║
39
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
40
║ 3 │ K1 │ K0 │ A2 │ B2 │ K0 │ C2 │ D2 ║
41
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
42
║ 4 │ K2 │ K2 │ A3 │ B3 │ K0 │ C3 │ D3 ║
43
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
Copied!

Left join/merge on DataFrame

Node
Browser
1
const dfd = require("danfojs-node")
2
3
4
let data = [['K0', 'k0', 'A0', 'B0'], ['k0', 'K1', 'A1', 'B1'],
5
['K1', 'K0', 'A2', 'B2'], ['K2', 'K2', 'A3', 'B3']]
6
7
let data2 = [['K0', 'k0', 'C0', 'D0'], ['K1', 'K0', 'C1', 'D1'],
8
['K1', 'K0', 'C2', 'D2'], ['K2', 'K0', 'C3', 'D3']]
9
10
let colum1 = ['Key1', 'Key2', 'A', 'B']
11
let colum2 = ['Key1', 'Key2', 'A', 'D']
12
13
let df1 = new dfd.DataFrame(data, { columns: colum1 })
14
let df2 = new dfd.DataFrame(data2, { columns: colum2 })
15
df1.print()
16
df2.print()
17
18
let merge_df = dfd.merge({ left: df1, right: df2,
19
on: ["Key1", "Key2"], how: "left"})
20
merge_df.print()
Copied!
1
Copied!
Output
1
//first DataFrame
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Key1 │ Key2 │ A │ B ║
4
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
5
║ 0 │ K0 │ k0 │ A0 │ B0 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
7
║ 1 │ k0 │ K1 │ A1 │ B1 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
9
║ 2 │ K1 │ K0 │ A2 │ B2 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
11
║ 3 │ K2 │ K2 │ A3 │ B3 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
//second DataFrame
16
17
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
18
║ │ Key1 │ Key2 │ A │ D ║
19
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
20
║ 0 │ K0 │ k0 │ C0 │ D0 ║
21
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
22
║ 1 │ K1 │ K0 │ C1 │ D1 ║
23
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
24
║ 2 │ K1 │ K0 │ C2 │ D2 ║
25
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
26
║ 3 │ K2 │ K0 │ C3 │ D3 ║
27
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
28
29
30
After left join
31
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
32
║ │ Key1 │ Key2 │ A │ B │ A_1 │ D ║
33
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
34
║ 0 │ K0 │ k0 │ A0 │ B0 │ C0 │ D0 ║
35
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
36
║ 1 │ k0 │ K1 │ A1 │ B1 │ NaN │ NaN ║
37
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
38
║ 2 │ K1 │ K0 │ A2 │ B2 │ C1 │ D1 ║
39
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
40
║ 3 │ K1 │ K0 │ A2 │ B2 │ C2 │ D2 ║
41
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
42
║ 4 │ K2 │ K2 │ A3 │ B3 │ NaN │ NaN ║
43
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
Copied!

Right join/merge on DataFrame

Node
Browser
1
const dfd = require("danfojs-node")
2
3
4
let data = [['K0', 'k0', 'A0', 'B0'], ['k0', 'K1', 'A1', 'B1'],
5
['K1', 'K0', 'A2', 'B2'], ['K2', 'K2', 'A3', 'B3']]
6
7
let data2 = [['K0', 'k0', 'C0', 'D0'], ['K1', 'K0', 'C1', 'D1'],
8
['K1', 'K0', 'C2', 'D2'], ['K2', 'K0', 'C3', 'D3']]
9
10
let colum1 = ['Key1', 'Key2', 'A', 'B']
11
let colum2 = ['Key1', 'Key2', 'A', 'D']
12
13
let df1 = new dfd.DataFrame(data, { columns: colum1 })
14
let df2 = new dfd.DataFrame(data2, { columns: colum2 })
15
df1.print()
16
df2.print()
17
18
let merge_df = dfd.merge({ left: df1, right: df2,
19
on: ["Key1", "Key2"], how: "right"})
20
merge_df.print()
Copied!
1
Copied!
Output
1
//first DataFrame
2
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
3
║ │ Key1 │ Key2 │ A │ B ║
4
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
5
║ 0 │ K0 │ k0 │ A0 │ B0 ║
6
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
7
║ 1 │ k0 │ K1 │ A1 │ B1 ║
8
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
9
║ 2 │ K1 │ K0 │ A2 │ B2 ║
10
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
11
║ 3 │ K2 │ K2 │ A3 │ B3 ║
12
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
13
14
15
//second DataFrame
16
17
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
18
║ │ Key1 │ Key2 │ A │ D ║
19
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
20
║ 0 │ K0 │ k0 │ C0 │ D0 ║
21
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
22
║ 1 │ K1 │ K0 │ C1 │ D1 ║
23
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
24
║ 2 │ K1 │ K0 │ C2 │ D2 ║
25
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
26
║ 3 │ K2 │ K0 │ C3 │ D3 ║
27
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
28
29
30
//after right join
31
32
╔═══╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╤═══════════════════╗
33
║ │ Key1 │ Key2 │ A │ B │ A_1 │ D ║
34
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
35
║ 0 │ K0 │ k0 │ A0 │ B0 │ C0 │ D0 ║
36
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
37
║ 1 │ K1 │ K0 │ A2 │ B2 │ C1 │ D1 ║
38
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
39
║ 2 │ K1 │ K0 │ A2 │ B2 │ C2 │ D2 ║
40
╟───┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────┼───────────────────╢
41
║ 3 │ K2 │ K0 │ NaN │ NaN │ C3 │ D3 ║
42
╚═══╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╧═══════════════════╝
Copied!
See also danfo.concat for joining objects based on axis.
Last modified 1yr ago