在给定多个条件的情况下,将新列应用于第二个df

2024-06-16 10:03:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,master_sourcemain_df。我想将start_dateend_datemain_df添加到master_source,因为这最终将允许我在两个数据帧上设置匹配的索引以进行合并。你知道吗

我的初始逻辑是检查1)两个数据帧中的market是否匹配,2)在master_source中的viewed_date是否在start_dateend_date之间。如果所有条件都符合,我想将start_dateend_date添加到master_source。你知道吗

请注意,viewed_datestart_dateend_date都已转换为datetime对象。你知道吗

以下是每个数据帧的输入示例:

master_source

viewed_date market
2019-04-15  Abilene, TX
2019-04-11  Yuma, AZ
2019-04-19  Abilene, TX

main_df

market       start_date   end_date
Abilene, TX  2019-04-11   2019-04-17
Yuma, AZ     2019-04-11   2019-04-17
Abilene, TX  2019-04-18   2019-04-26

我的代码:

def add_dates(row):
    matches = main_df[
        (main_df['market'] == row['market']) &
        (row['viewed_date'].between(main_df['start_date'], main_df['end_date']))]
    start = matches['start_date'].values[0] if len(matches) > 0 else None
    end = matches['end_date'].values[0] if len(matches) > 0 else None
    row.loc['start_end', 'end_date'] = start, end
    return row

master_source = master_source.apply(add_dates, axis=1)

到目前为止,我已知的问题是错误AttributeError: ("'Timestamp' object has no attribute 'between'", 'occurred at index 0'),我觉得我没有正确地添加两个新列,而不是只添加一个新列。你知道吗


Tags: 数据mastersourcedfdatemainmarketstart
1条回答
网友
1楼 · 发布于 2024-06-16 10:03:43

开始工作和结束工作分别进行:

def add_start_dates(market, viewed):
    matches = main_df[(main_df['market'] == market)]

    matches2 = matches[(matches['start_date'] <= viewed)&
                       (matches['end_date'] >= viewed)]
    if len(matches2)>0:
        return matches2['start_date'].iloc[0]
    else:
        return viewed

结束日期也一样。你知道吗

print master_source
print 
print main_df
print
master_source['start_date'] = [add_start_dates(m, v) for m, v in zip(master_source['market'],
                                                               master_source['viewed_date'])]
print master_source

收益率:

    market viewed_date
0  abilene  2019-04-15
1     yuma  2019-04-11
2  abilene  2019-04-19

    end_date   market start_date
0 2019-04-17  abilene 2019-04-11
1 2019-04-17     yuma 2019-04-11
2 2019-04-26  abilene 2019-04-18


    market viewed_date start_date
0  abilene  2019-04-15 2019-04-11
1     yuma  2019-04-11 2019-04-11
2  abilene  2019-04-19 2019-04-18

相关问题 更多 >