如何基于熊猫数据框中的日期值和条件创建新列

时间:2020-05-19 05:26:37

标签: python pandas numpy dataframe np

表1:

项目类型订单日期发货日期购买成本

0示例2014-08-10 2014-08-10 850.7544

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

2化妆品2015年2月22日2015年2月22日NaN

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

4个人护理9/17/2014 9/17/2014 NaN

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

6件衣服2013年2月20日2013年2月20日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

在这里,我需要根据表2填写表1中的“购买成本”列v“日期和单位成本”列

例如,在表1中,(2010-04-02,2010-04-02)之间的家庭日期值 因此,在表2(2010-01-01,2010-05-01)之间的家庭价值中,因此表1的订购日期和发货日期在“购买开始日期”和“购买结束日期”的日期范围内,可以将购买成本的值填充为“ 467.789”,那么如何填充购买成本?

1 个答案:

答案 0 :(得分:0)

我假定所有“日期”列都已转换为 datetime 类型。 否则,请从转换开始。

生成辅助系列

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

它包含每年的首个价格和产品。 产品名称( Item )和 year 是MultiIndex的级别,价格是值。

对于您的示例数据,请在2014年 的一行中填写 Cosmetics 结果是:

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

然后,填充 price 列,运行:

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