Pandas 通过合并两个数据框和匹配的行创建一个新列
Pandas creating a new column by merging two dataframes and matching rows
我有两个数据框,其中一个匹配列 [ID]。
DF 1
ID VAR
1 442
1 429
1 58
2 928
2 8493
3 093
3 809
3 913
4 133
4 490
DF2
ID CODE
1 10foo
2 20bar
3 30foo
4 40bar
我正在尝试合并这些数据帧,以便得到如下内容:
东风 3
ID VAR CODE
1 442 10foo
1 429 10foo
1 58 10foo
2 928 20bar
2 8493 20bar
3 093 30foo
3 809 30foo
3 913 30foo
4 133 40bar
4 490 40bar
我已经用 DF3 = DF1.merge(DF2, on='ID', how='inner', right_index=True)
试过了
这确实有效,但最终会重复加载值,由于某种原因行数增加一倍以上。真的不确定为什么会这样。我需要 DF3 中的行数与 DF1
相同
感谢您的帮助。
要保持与 DF1 相同的行数,您需要进行左合并:
df1.merge(df2, on='ID', how='left')
我们可以试试这个:
>>> df = pd.merge(df1,
... df2,
... how='left',
... left_on=['ID'],
... right_on=['ID'])
>>> df
ID VAR CODE
0 1 442 10foo
1 1 429 10foo
2 1 58 10foo
3 2 928 20bar
4 2 8493 20bar
5 3 93 30foo
6 3 809 30foo
7 3 913 30foo
8 4 133 40bar
9 4 490 40bar
我有两个数据框,其中一个匹配列 [ID]。
DF 1
ID VAR
1 442
1 429
1 58
2 928
2 8493
3 093
3 809
3 913
4 133
4 490
DF2
ID CODE
1 10foo
2 20bar
3 30foo
4 40bar
我正在尝试合并这些数据帧,以便得到如下内容:
东风 3
ID VAR CODE
1 442 10foo
1 429 10foo
1 58 10foo
2 928 20bar
2 8493 20bar
3 093 30foo
3 809 30foo
3 913 30foo
4 133 40bar
4 490 40bar
我已经用 DF3 = DF1.merge(DF2, on='ID', how='inner', right_index=True)
试过了
这确实有效,但最终会重复加载值,由于某种原因行数增加一倍以上。真的不确定为什么会这样。我需要 DF3 中的行数与 DF1
感谢您的帮助。
要保持与 DF1 相同的行数,您需要进行左合并:
df1.merge(df2, on='ID', how='left')
我们可以试试这个:
>>> df = pd.merge(df1,
... df2,
... how='left',
... left_on=['ID'],
... right_on=['ID'])
>>> df
ID VAR CODE
0 1 442 10foo
1 1 429 10foo
2 1 58 10foo
3 2 928 20bar
4 2 8493 20bar
5 3 93 30foo
6 3 809 30foo
7 3 913 30foo
8 4 133 40bar
9 4 490 40bar