第一个数据帧是:
data_date cookie_type dau next_dau dau_7 dau_15
0 20181006 avg(0-d) 2288 NaN NaN NaN
1 20181006 avg(e-f) 2284 NaN NaN NaN
2 20181007 avg(e-f) 2296 NaN NaN NaN
第二个数据帧是:
data_date cookie_type next_dau
0 20181006 avg(e-f) 908
1 20181006 avg(0-d) 904
如何从第二个数据帧更新第一个数据帧的next_dau 我尝试了Combine_first和fillna,它们似乎不支持多重索引:
cols = ['data_date', 'cookie_type']
if (frame1 is not None and not frame1.empty):
frame1.set_index(cols)
print(frame1)
print(next_day_dau)
frame1.combine_first(next_day_dau.set_index(cols))
frame1.combine_first(dau_7.set_index(cols))
frame1.combine_first(dau_15.set_index(cols))
最后,我在“廖天华”的帮助下解决了这个问题:
frame1.index = frame1.data_date.astype(str) + frame1.cookie_type
next_day_dau.index = next_day_dau.data_date.astype(str) + next_day_dau.cookie_type
dau_7.index = dau_7.data_date.astype(str) + dau_7.cookie_type
dau_15.index = dau_15.data_date.astype(str) + dau_15.cookie_type
# get_index
next_day_dau_idx = frame1.index.isin(next_day_dau.index)
dau_7_idx = frame1.index.isin(dau_7.index)
dau_15_idx = frame1.index.isin(dau_15.index)
#
if any(next_day_dau_idx):
frame1.loc[next_day_dau_idx, "next_dau"] = next_day_dau.next_dau
if any(dau_7_idx):
frame1.loc[dau_7_idx, "dau_7"] = dau_7.dau_7
if any(dau_15_idx):
frame1.loc[dau_15_idx, "dau_15"] = dau_15.dau_15
答案 0 :(得分:3)
多索引是一个复杂的索引。
这是解决问题的简单方法。
frame1.index = frame1.data_date.astype(str) + frame1.cookie_type
frame2.index = frame2.data_date.astype(str) + frame2.cookie_type
frame1.loc[frame2.index,"next_dau"] = frame2.next_dau
处理完成后,您可以删除索引。