如何将一个DataFrame单元格文本值复制到另一个DataFrame单元格?
按ID匹配转移DataFrame单元格文本值的解决方案
你需要把dataframe1中text列的内容,对应到dataframe2里相同id的wordmatch列对吧?这是pandas里很常见的操作,给你几个高效的实现方法:
方法1:用merge合并匹配(最稳妥)
这种方法不管两个DataFrame的ID顺序如何,都能精准匹配,还能保留dataframe2的所有行:
import pandas as pd # 先定义你的示例数据 df1 = pd.DataFrame({'id': [1, 2], 'text': ['athens', 'greece']}) df2 = pd.DataFrame({'id': [1, 2], 'wordmatch': [pd.NA, pd.NA]}) # 按id左合并,只取需要的列 merged = df2.merge(df1[['id', 'text']], on='id', how='left') # 把匹配到的text赋值给wordmatch df2['wordmatch'] = merged['text']
how='left'保证了dataframe2里所有行都不会丢失,哪怕某个ID在dataframe1里找不到,对应的wordmatch还是会保持NA。
方法2:用map快速映射(效率最高)
如果dataframe1里的id都是唯一的,推荐用这个方法,代码简洁且速度快:
# 把df1转成{id: 对应text}的字典映射 id_text_map = df1.set_index('id')['text'].to_dict() # 直接给df2的wordmatch列映射值 df2['wordmatch'] = df2['id'].map(id_text_map)
数据量越大,这个方法的优势越明显,比merge的速度更快。
方法3:用loc按条件赋值(仅限ID顺序完全一致时)
如果你的两个DataFrame的id顺序完全相同,也可以直接按索引匹配赋值,但这个方法局限性大,不推荐通用场景:
df2.loc[df2['id'] == df1['id'], 'wordmatch'] = df1['text']
要是ID顺序不一样,这个方法会匹配错误,所以优先用前两种。
注意事项
如果dataframe1里存在重复的id,map和merge都会取该ID最后出现的text值。如果需要处理重复ID的情况,记得先对df1做去重(比如df1.drop_duplicates(subset='id', keep='first'))或者聚合操作。
内容的提问来源于stack exchange,提问作者Stathis G.
相关产品推荐
相关产品推荐

