繁体   English   中英

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

[英]Copy column value from a dataframe to another if values are equal

我有两个这样的数据框(这是一个例子,因为我的数据框很复杂):

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'])`

我的两个数据帧的长度不同。

正如您在我的第二个 df_c 中所见,某些“id”出现了 2 次。 (对于 id=2)

我想在我的df_c中创建一个新列,如果'id'来自我的 df_c == 'id' 从我的df_p复制我的 df_p 的值'redness' of my df_p ' 。

不知道说的清楚不。。。

多谢 !!!

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

代码:

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

一个简单的合并就可以解决问题:

您遇到的一个问题是,在一个 dataframe 中,您的idstring类型,
在另一个 dataframe 中, idint类型。

解决这个问题的最简单方法是在 merge 之前将字符串转换为 int ,
并在需要时转换回来。

代码:

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

print(df_c)

Output:

df_c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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