[英]Setting value of columns in one dataframe to another dataframe column based on condition
我有一个 dataframe df1
:-
ID | 团体 | 家庭 | 奖金 |
---|---|---|---|
1 | tri23_1 | 拉文 | 一个 |
2 | hsgç_T2 | 格兰迪 | 乙 |
3 | bbbj-1Y_jn | 凡多尔 | C |
4 | hsgç_T2 | 贡多 | D |
并有一个 dataframe df2
:-
ID | 团体 | 家庭 | 奖金 |
---|---|---|---|
1 | 三 | 布伦迪 | 乙 |
2 | hsgç_T2 | 凡多尔 | 一个 |
5 | bbbj-1Y_jn | 凡多尔 | 乙 |
6 | hsgç_T3 | 贡多 | D |
对于df2
中存在的df1
中的id
,我想在df1
中单独设置df2
的Group
、 Family
、 Bonus
列。 预期df1
:-
ID | 团体 | 家庭 | 奖金 |
---|---|---|---|
1 | 三 | 布伦迪 | 乙 |
2 | hsgç_T2 | 凡多尔 | 一个 |
3 | bbbj-1Y_jn | 凡多尔 | C |
4 | hsgç_T2 | 贡多 | D |
shared_columns = ['Group', 'Family', 'Bonus']
replacements = (pd.merge(df1, df2, on='id', how='left')
.iloc[:, -len(shared_columns):])
replacements.columns = shared_columns
df1.update(replacements)
例子:
df1 = pd.DataFrame([[1, 1, 0.1, 1],
[2, 2, 0.2, 2],
[3, 3, 0.3, 3]],
columns=['id', 'Group', 'Family', 'Bonus'])
df2 = pd.DataFrame([[3, 30, 300, 3],
[1, 10, 100, 1],
[4, 40, 400, 4]],
columns=['id', 'Group', 'Family', 'Bonus'])
df1
:
id Group Family Bonus
0 1 1 0.1 1
1 2 2 0.2 2
2 3 3 0.3 3
df2
:
id Group Family Bonus
0 3 30 300 3
1 1 10 100 1
2 4 40 400 4
pd.merge(df1, df2, on='id', how='left'
在列id
上执行左合并:
id Group_x Family_x Bonus_x Group_y Family_y Bonus_y
0 1 1 0.1 1 10.0 100.0 1.0
1 2 2 0.2 2 NaN NaN NaN
2 3 3 0.3 3 30.0 300.0 3.0
replacements
(在选择最后一列并重命名它们之后):
Group Family Bonus
0 10.0 100.0 1.0
1 NaN NaN NaN
2 30.0 300.0 3.0
结果df1
:
id Group Family Bonus
0 1 10.0 100.0 1.0
1 2 2.0 0.2 2.0
2 3 30.0 300.0 3.0
如果在 DF 上设置索引是可以接受的,那么这是实现它的一种方法。 使用更新
df.set_index('id', inplace=True)
df.update(df2.set_index('id'))
df
Group Family Bonus
id
1 tri Brendy B
2 hsgç_T2 Fantol A
3 bbbj-1Y_jn Fantol C
4 hsgç_T2 Gondow D
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.