0
鑑於數據幀df
一個數據幀:更新基於另一個數據框
Id Sex Group Time Time!
0 21 M 2 2.31 NaN
1 2 F 2 2.29 NaN
和update
:
Id Sex Group Time
0 21 M 2 2.36
1 2 F 2 2.09
2 3 F 1 1.79
我想匹配Id
,Sex
和Group
,要麼更新Time!
與Time
值(從df)如果匹配,或者插入新記錄。
這是我如何做到這一點:
df = df.set_index(['Id', 'Sex', 'Group'])
update = update.set_index(['Id', 'Sex', 'Group'])
for i, row in update.iterrows():
if i in df.index: # update
df.ix[i, 'Time!'] = row['Time']
else: # insert new record
cols = up.columns.values
row = np.array(row).reshape(1, len(row))
_ = pd.DataFrame(row, index=[i], columns=cols)
df = df.append(_)
print df
Time Time!
Id Sex Group
21 M 2 2.31 2.36
2 F 2 2.29 2.09
3 F 1 1.79 NaN
的代碼似乎工作,我想結果與上述一致。不過,我已經注意到了這個faultily表現上了一個大的數據集,與條件
if i in df.index:
...
else:
...
工作顯然是錯誤的(它會繼續else
和副詩句,它應該不會,我想,這多指標可能不知何故)。
所以我的問題是,你知道任何其他方式,或更強大的版本,我更新一個DF基於另一個DF?
我認爲您的預期存在一個錯誤,2.09行在更新中沒有組= 1。 –
我認爲你的預期產出有一個錯字順便說一句。在你提供的例子中沒有'(2,F,1)' – TomAugspurger
確定Andy,首先你擊敗我的回答,現在我的評論:) – TomAugspurger