首页 文章

如何根据特定条件将数据框中的值替换为另一个数据帧中的值?

提问于
浏览
1

我想用数据帧“df”中相同id的“body”值替换数据帧“result”的列“q1_body”和“q2_body”的值,代码如下:

def replace_body(x):
    id1 = result.loc[x].qid1
    result.loc[x].q1_body = df[df["qid"]==id1]["body"]
    id2 = result.loc[x].qid2
    result.loc[x].q2_body = df[df["qid"]==id2]["body"]

result.index.map(lambda x: replace_body(x))

当我运行代码时,我在ipython控制台中收到了以下提醒,程序就停在这里:

//anaconda/lib/python3.6/site-packages/pandas/core/generic.py:3110:SettingWithCopyWarning:尝试在DataFrame的切片副本上设置值请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self [name] = value

希望有人能告诉我这里有什么问题 .

假设两个数据帧是:

结果:

qid1 q1_body qid2 q2_body
 1a    abc    2a    bcd
 1a    abc    3a    cde
 2a    bcd    3a    cde

DF:

qid body
1a sfgaks
2a shdfjk
3a adjkwf

预期的输出如下:

结果:

qid1 q1_body qid2 q2_body
 1a  sfgaks   2a  shdfjk
 1a  sfgaks   3a  adjkwf
 2a  shdfjk   3a  adjkwf

2 回答

  • 2

    您需要mapset_index创建 Series

    s = df.set_index('qid')['body']
    result['q1_body'] = result['qid1'].map(s)
    result['q2_body'] = result['qid2'].map(s)
    print (result)
      qid1 q1_body qid2 q2_body
    0   1a  sfgaks   2a  shdfjk
    1   1a  sfgaks   3a  adjkwf
    2   2a  shdfjk   3a  adjkwf
    
  • 1

    这里:

    # Set index and get body as a series
    s = df.set_index(qid)['body']
    result['q1_body'] = s.loc[result['qid1']].values
    result['q2_body'] = s.loc[result['qid2']].values
    

    结果:

    qid1 q1_body qid2 q2_body
    0   1a  sfgaks   2a  shdfjk
    1   1a  sfgaks   3a  adjkwf
    2   2a  shdfjk   3a  adjkwf
    

    时间(10k行,使用自动生成的Lorem):

    我的方法
    My method

    @ Jezareal的方法
    @Jezreal's Method

相关问题