如何在Pandas数据框架中创建一个基于日期值& 条件的新列。

问题描述 投票:0回答:1

表1.项目类型 订单日期 运输日期 采购成本

项目类型 订购日期 交货日期 采购成本

0 例 2014-08-10 2014-08-10 850.7544 .

1 小吃 2014-08-10 2014-08-10 NaN。

2 化妆品 2222015 2222015 NaN

3水果 2015-09-12 2015-09-12 NaN

4 个人护理 9172014 9172014 NaN

5 户 2010-04-02 2010-04-02 NaN

6 衣服 2202013 2202013 NaN

表2.

Item Type   Purchase Start Date     Purchase End Date   Cost Per Unit 

0 婴儿食品 2010-01-01 2010-05-01 158.2736

1 饮料 2010-01-01 2010-05-01 36.0620

2 谷类 2010-01-01 2010-05-01 160.4460

3 衣服 2010-01-01 2010-05-01 66.6608

4化妆品 2010-01-01 2010-05-01 266.6920

5 水果 2010-01-01 2010-05-01 5.5980

6 户 2010-01-01 2010-05-01 467.7890

7 肉类 2010-01-01 2010-05-01 274.2285

在这里,我需要填写表1中的采购成本列,基于表2中的日期& 每单位成本列。

例如在表1中家庭日期值在(2010-04-02 ,2010-04-02)之间,所以在表2中家庭值在(2010-01-01 ,2010-05-01)之间,所以从表1中订单日期&发货日期都在 "采购开始日期"& "采购结束日期 "的日期范围内,所以我们可以将采购成本值填成 "467.789",那么如何填写采购成本呢?

python pandas numpy dataframe np
1个回答
0
投票

我假设所有的 "日期 "列都已经转换为 "日期"。日期 类型,否则从转换开始。

生成一个辅助的 系列:

wrk = pricing.assign(year=pricing['Start Date'].dt.year)\
    .drop_duplicates(subset=['Item', 'year'])\
    .set_index(['Item', 'year'])['(USD)dollar'].rename('price'); wrk

它包含了各年度和产品的第一价格。项目)和 是MultiIndex的级别,价格是数值。

对于您的样本数据,用一行来表示 化妆品2014,结果是:

Item       year
Snacks     2010    68
           2011    72
Cosmetics  2014    50
Name: price, dtype: int64

那么,为了填满 价钱 列,运行。

product.price = wrk[product.set_index(['Product',
    product['Date (USD)'].dt.year]).index].tolist()

结果是:

     Product Date (USD)  price
0     Snacks 2010-02-03   68.0
1     Snacks 2010-02-06   68.0
2     Snacks 2014-02-03    NaN
3     Snacks 2012-02-03    NaN
4  Cosmetics 2012-02-03    NaN
5  Cosmetics 2013-02-03    NaN
6  Cosmetics 2013-02-08    NaN
7  Cosmetics 2014-02-06   50.0
8  Cosmetics 2014-02-09   50.0
© www.soinside.com 2019 - 2024. All rights reserved.