Pandas:基于两个数据帧中的动态值(列)的条件查找

2024-10-03 13:29:18 发布

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

我有两个数据帧,格式如下

DF1:
    YearNb  MonthNb  WeekNb NatCoCode      BNCode  LocalPrice
0     2017        7      27       OBE  BN20008222          60
1     2017        7      28       OBE  BN20008222          61
2     2017        7      29       OBE  BN20008222          62
3     2017        7      30       OBE  BN20008223          63
4     2017        8      31       OBE  BN20008223          64
5     2017        8      32       OBE  BN20008223          65
6     2017        8      33       OBE  BN20008223          66
7     2017        7      27       OFR  BN20008222          67
8     2017        7      28       OFR  BN20008222          68
9     2017        7      29       OFR  BN20008222          69
10    2017        7      30       OFR  BN20008223          70
11    2017        8      31       OFR  BN20008223          71
12    2017        8      32       OFR  BN20008223          72

DF2:
    YearNb_x  MonthNb_x  WeekNb_x NatCoCode VariantCode
0       2017          7        27       OBE  BN20008222
1       2017          7        28       OBE  BN20008222
2       2017          9        34       OBE  BN20008223
3       2018          4        18       OBE  BN20008222
4       2017          8        31       OBE  BN20008222
5       2017          8        32       OBE  BN20008222
6       2018          7        27       OFR  BN20008222
7       2017          7        28       OFR  BN20008223
8       2017          7        29       OFR  BN20008222
9       2017          8        31       OFR  BN20008222
10      2017          8        32       OFR  BN20008223

我要做的是获取DF2中可用的最新价格,并将其添加到DF1中的新列(LocalPrice)。此数据的频率为每周,周数基于日历周(1到一年中的最后一周),BNCode(与VariantCode相同)是产品的唯一标识,条件是:

如果同一代码、同一周、同一年有价格,我要这个价格。在

否则我会选最新的(前一周,两周前,三周,等等…)

以下是我试图做的,但老实说,我对熊猫这个级别并不太熟悉,所以我想我的逻辑是不正确的:

^{pr2}$

这只是一个小样本,我有一个大得多的数据集,我们的想法是取同一周的价格,以防存在,否则取过去最近一周的价格。如果没有一个标准是有效的,它可能只是空的,未来的价格(在DF2中的一个之后的几周)就不有趣了。我手动起草了可能的结果,可能是这样的:

    YearNb_x  MonthNb_x  WeekNb_x NatCoCode VariantCode  Price
0       2017          7        27       OBE  BN20008222     60
1       2017          7        28       OBE  BN20008222     61
2       2017          9        34       OBE  BN20008223     66
3       2018          4        18       OBE  BN20008222     63
4       2017          8        31       OBE  BN20008222     63
5       2017          8        32       OBE  BN20008222     63
6       2018          7        27       OFR  BN20008222     67
7       2017          7        28       OFR  BN20008223  empty
8       2017          7        29       OFR  BN20008222     69
9       2017          8        31       OFR  BN20008222     70
10      2017          8        32       OFR  BN20008223     72

有没有人对我如何处理这个问题有更好的建议?我也尝试过合并数据帧,但也没有成功。在

非常感谢!在


Tags: 数据价格df1df2bncodeobelocalpricebn20008223