我要替換的列「q1_body」和數據幀「結果」,「q2_body」具有相同ID的「身體」的值數據框「DF」的值,代碼如下:如何根據特定條件用另一個數據框中的值替換數據框中的值?
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:
A value is trying to be set on a copy of a slice from a DataFrameSee the caveats in the documentation: 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
爲什麼映射?就像我在我的回答中寫的那樣,'loc'就可以做到。唯一的問題是,我忘了在'df'上設置索引...哎呀! :-P – Kartik
'map'是映射數據的更好,更明顯的方式。 – jezrael
比'.loc'慢。我們來做一次時間測試吧? – Kartik