简体   繁体   English

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

[英]Setting value of columns in one dataframe to another dataframe column based on condition

I have a dataframe df1 :-我有一个 dataframe df1 :-

id ID Group团体 Family家庭 Bonus奖金
1 1 tri23_1 tri23_1 Laavin拉文 A一个
2 2 hsgç_T2 hsgç_T2 Grendy格兰迪 B
3 3 bbbj-1Y_jn bbbj-1Y_jn Fantol凡多尔 C C
4 4 hsgç_T2 hsgç_T2 Gondow贡多 D D

and have a dataframe df2 :-并有一个 dataframe df2 :-

id ID Group团体 Family家庭 Bonus奖金
1 1 tri Brendy布伦迪 B
2 2 hsgç_T2 hsgç_T2 Fantol凡多尔 A一个
5 5 bbbj-1Y_jn bbbj-1Y_jn Fantol凡多尔 E
6 6 hsgç_T3 hsgç_T3 Gondow贡多 D D

For id in df1 that are present in df2 ,I want to set Group , Family , Bonus columns alone of df2 in df1 .对于df2中存在的df1中的id ,我想在df1中单独设置df2GroupFamilyBonus列。 Expected df1 :-预期df1 :-

id ID Group团体 Family家庭 Bonus奖金
1 1 tri Brendy布伦迪 B
2 2 hsgç_T2 hsgç_T2 Fantol凡多尔 A一个
3 3 bbbj-1Y_jn bbbj-1Y_jn Fantol凡多尔 C C
4 4 hsgç_T2 hsgç_T2 Gondow贡多 D 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)

Example:例子:

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 : df1

   id  Group  Family  Bonus
0   1      1     0.1      1
1   2      2     0.2      2
2   3      3     0.3      3

df2 : 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' performs a left-merge, on the column id : 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 (after selecting the last columns, and renaming them): replacements (在选择最后一列并重命名它们之后):

   Group  Family  Bonus
0   10.0   100.0    1.0
1    NaN     NaN    NaN
2   30.0   300.0    3.0

Resulting df1 :结果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

if setting index on DF is acceptable, then this is one way to accomplish it.如果在 DF 上设置索引是可以接受的,那么这是实现它的一种方法。 Using update使用更新

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.

相关问题 根据条件从另一个数据框设置数据框列的值 - Setting value for dataframe column from another dataframe based on condition 根据条件使用另一个数据帧列值更新一个数据帧值 - Update one dataframe value with another dataframe column value based on the condition 一个 dataframe 列与另一个 dataframe 列的倍数基于条件 - One dataframe column multiple with another dataframe column based on condition 根据条件将一个 dataframe 列的值分配给另一个 dataframe 列 - assign values of one dataframe column to another dataframe column based on condition 根据另一个数据帧的列值的条件将数据添加到数据帧中的列 - Adding data to columns in a dataframe based on condition on column values of another dataframe 根据另一个 dataframe 的 id 和值在一个 dataframe 上设置值 - Setting value on one dataframe based on the id and value from another dataframe 根据另一列中的值组合数据框的列 - Combining columns of dataframe based on value in another column 根据另一列中的条件在 Pandas 数据框中设置值 - Setting Values in Pandas Dataframe Based on Condition in Another Column 如何根据列条件将选定的列从数据框中复制到另一个 - How to copy selected columns from a dataframe to another based on a column condition 遍历列 pandas dataframe 并根据条件创建另一列 - iterate through columns pandas dataframe and create another column based on a condition
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM