繁体   English   中英

如何从另一个数据框更新一个数据框的特定列

[英]how to update specific column of one dataframe from another dataframe

第一个数据帧是:

   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

如何从我尝试过的Combine_first和fillna的第二个数据帧更新第二个数据帧的next_dau,它们似乎不支持多索引:

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

多索引是一个复杂的索引。

这是解决问题的简单方法。

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

处理完成后,您可以删除索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM