簡體   English   中英

如何根據特定條件將數據框中的值替換為另一個數據幀中的值?

[英]How to replace values in a dataframe with values in another dataframe based on certain condition?

我想用數據幀“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

您需要按set_index創建的Series map

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

這里:

# 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):

我的方法 我的方法

@ Jezareal的方法 @ Jezreal的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM