基于另一个 DataFrame 的公共列过滤和替换一个 Pandas DataFrame 中的值

Fhtsm

我有一个关于 Pandas 以及正确索引和替换值的问题。

我有 2 个数据帧,df1 和 df2,具有相同的列(Col1、Col2、Col3 和 Col4)。

df1 = pd.DataFrame([['A','b','x',1], ['A','b','y',2], ['A','c','z',3], ['B','b','x',4]], columns=['Col1', 'Col2', 'Col3', 'Col4'])
df2 = pd.DataFrame([['A','b','y',0], ['B','b','x',0]], columns=['Col1','Col2','Col3','Col4'])
    
df1
  Col1 Col2 Col3 Col4
0    A    b    x    1
1    A    b    y    2
2    A    c    z    3
3    B    b    x    4
    
df2
  Col1 Col2 Col3 Col4
0    A    b    y    0
1    B    b    x    0

DF1,我想替换值COL4中匹配的值,该行的其他列在(Col1中,col2的和COL3)DF2与另一个值(假设100)。

生成的 df1 将如下所示:

df1
  Col1 Col2 Col3 Col4
0    A    b    x    1
1    A    b    y  100
2    A    c    z    3
3    B    b    x  100

我试过这样的事情:

columns = list(df1.columns)    
columns.remove('Col4')
df1.loc[(df1[cols] == df2[cols].values).all(axis=1)]['Col4']=100

但是我遇到了错误,我不确定这是否达到了我想要的。

sammywemmy

您可以isin对索引进行操作,并通过布尔掩码分配值:


cols = ['Col1', 'Col2', 'Col3']

temp1 = df1.set_index(cols)

temp2 = df2.set_index(cols)

# get the booleans here 
booleans = temp1.index.isin(temp2.index)


# this assigns 100 to only rows in Col4
# that are True
df1.loc[booleans, 'Col4'] = 100

df1

  Col1 Col2 Col3  Col4
0    A    b    x     1
1    A    b    y   100
2    A    c    z     3
3    B    b    x   100

或者,您可以使用pd.mergeindicator参数解决它

(df1.merge(df2, 
           on = cols, 
           how = 'left', 
           indicator=True, 
           suffixes = (None, '_y'))
    .assign(Col4 = lambda df: np.where(df._merge == 'both', 
                                       100, 
                                       df.Col4))
   .loc[:, df1.columns]
)

  Col1 Col2 Col3  Col4
0    A    b    x     1
1    A    b    y   100
2    A    c    z     3
3    B    b    x   100

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于Pandas中的另一个DataFrame更改DataFrame的某些列中的值

如何基于另一个 DataFrame 中的列在 Pandas DataFrame 中创建新列?

基于 Pandas 中的另一个 DataFrame 修改 DataFrame

Pandas 基于另一个 DataFrame 修改列值

通过匹配另一个DataFrame中的值来最佳填充Pandas DataFrame列

Python Pandas根据另一个列中的总数从另一个dataFrame中选择值

使用来自另一个 DataFrame 的值搜索 Pandas DataFrame 中的值

使用另一个Pandas DataFrame在Pandas DataFrame中填写NA值

如何使用 Pandas 中的另一个 DataFrame 填充 DataFrame 中的缺失值

DataFrame中的新列基于另一个DataFrame中的行和列

基于唯一的多列索引的另一个DataFrame的新pandas DataFrame

如何用另一个 DataFrame 的值替换 pandas DataFrame?

根据另一个列表从pandas dataframe列中的列表中删除值

将 Pandas DataFrame 中的 Filtered 行替换为另一个 Dataframe

通过另一个DataFrame中的唯一值过滤一个DataFrame

如何在Pandas Dataframe中获取最接近另一个值的值

如何通过使用 Pandas 查找另一个 DataFrame 在 DataFrame 列中创建列表?

如何使用来自另一个DataFrame的单个值创建Pandas DataFrame?

基于另一个DataFrame的DataFrame的新列

Pandas Dataframe 使用 groupby 另一个列值对列中的每 2 个增量值进行排名

如何在Pandas DataFrame的wrt索引和另一个DataFrame的列中映射数据

python&pandas-删除行,其中列值是另一个DataFrame中的索引值

如何在基于另一个DataFrame的列上删除DataFrame中的行?

用另一个DataFrame替换Pandas多索引DataFrame的列

如何在不使用for循环的情况下基于来自另一个Dataframe的值对pandas DataFrame进行切片?

如何使用另一个pandas.DataFrame中的数据填充pandas.DataFrame中的列?

从基于另一个 DataFrame 的列中减去 1。熊猫

如何从Pandas DataFrame列中减去一个值

在DataFrame上执行操作,并获得与Pandas中另一个DataFrame中存在的条件匹配的DataFrame结果