python 如果值相等,则将列值从一个 Dataframe 复制到另一个 Dataframe

x6h2sr28  于 2022-12-10  发布在  Python
关注(0)|答案(2)|浏览(383)

我有两个这样的 Dataframe (这是一个例子,因为我的 Dataframe 是复杂的):

lst_p = [['2', 0], ['3', 1], ['4', 0], ['5', 0]]  
df_p = pd.DataFrame(lst_p, columns =['id', 'redness'])


lst_c = [['apple', 2], ['orange', 2], ['banana', 3], ['kiwi', 4], ['cherry', 5]]  
df_c = `pd.DataFrame(lst_c, columns =['name', 'id'])`

我的两个 Dataframe 长度不同。

正如您在我的第二个df_c中所看到的,某些'id'出现了2次。(对于id=2)
我想在我的df_c中创建一个新列,该列从我的df_p中复制值'redness' of my df_p if 'id' from my df_c == 'id'。
我不知道这是不是很清楚...
非常感谢!

ahy6op9u

ahy6op9u1#

一个简单的**merge就可以达到这个目的:
您遇到的一个问题是,在一个 Dataframe 中,您的id属于string类型,
并且在另一个 Dataframe 中,idint类型。
解决这个问题最简单的方法是在合并
之前将字符串转换为int**,
并且如果需要的话可以转换回来。

代码:

df_p.id = df_p.id.astype(int)
df_c = pd.merge(df_c, df_p, on=['id'], how='left')

print(df_c)

输出:

euoag5mw

euoag5mw2#

使用可以简单地尝试将df_p两列转换为字典any使用lambda查找每个id的redness,并创建新列。
编码:

df_c['redness'] = df_c['id'].apply(lambda x: pd.Series(df_p.redness.values,index=df_p.id).to_dict()[str(x)])
df_c

相关问题