I have the following two CSV files:
file1.csv
JavaScript
x
11
11
1
val calc_1
2
20 1
3
20 2
4
20 3
5
20 4
6
10 5
7
10 6
8
10 7
9
5 8
10
5 9
11
and the second file2.csv
JavaScript
1
11
11
1
val calc_2
2
20 12
3
20 22
4
20 32
5
20 42
6
10 52
7
10 62
8
10 72
9
5 82
10
5 92
11
and i would like to have them merged like this:
JavaScript
1
11
11
1
val calc_1 calc_2
2
20 1 12
3
20 2 22
4
20 3 32
5
20 4 42
6
10 5 52
7
10 6 62
8
10 7 72
9
5 8 82
10
5 9 92
11
my code that I wrote is:
JavaScript
1
5
1
a = pd.read_csv('file1.csv')
2
b = pd.read_csv('file2.csv')
3
merged = a.merge(b, on='val')
4
merged.to_csv("merged.csv", index=False)
5
but when I do this I get for each calc_1
point the whole dataset copied like this:
JavaScript
1
22
22
1
val calc_1 calc_2
2
20 1 12
3
20 1 22
4
20 1 32
5
20 1 42
6
10 1 52
7
10 1 62
8
10 1 72
9
5 1 82
10
5 1 92
11
12
20 2 12
13
20 2 22
14
20 2 32
15
20 2 42
16
10 2 52
17
10 2 62
18
10 2 72
19
5 2 82
20
5 2 92
21
22
what am I doing wrong?
Advertisement
Answer
Here is a solution you can try out, using pd.concat
JavaScript
1
4
1
import pandas as pd
2
3
pd.concat([df1.set_index('val'), df2.set_index('val')], axis=1).reset_index()
4
JavaScript
1
11
11
1
val calc_1 calc_2
2
0 20 1 12
3
1 20 2 22
4
2 20 3 32
5
3 20 4 42
6
4 10 5 52
7
5 10 6 62
8
6 10 7 72
9
7 5 8 82
10
8 5 9 92
11