[英]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 中,您的id
是string
类型,
在另一个 dataframe 中, id
是int
类型。
解决这个问题的最简单方法是在 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.