繁体   English   中英

根据条件将一个 dataframe 中的列值设置为另一个 dataframe 列

[英]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中单独设置df2GroupFamilyBonus列。 预期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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM