【发布时间】:2021-07-23 17:01:18
【问题描述】:
我一直在使用传统的字典映射方法新建一个 Pandas 列,如下所示:
product_costs = {x: 1, y: 2, z: 3}
df['costs'] = df['product'].map(product_costs)
这一直有效,但最近产品“x”的成本发生了变化 - 例如,从 4 月 1 日起成本从 1 增加到 4。
我的 'df' 也有一个日期列,我试图弄清楚如何将 1 的值映射到 4 月之前的日期列和 4 的值在 4 月之后的日期列。
我可能可以使用 for 循环迭代地执行此操作,即:
df['costs'] = ''
index = 0
for i in df['product']:
if i == 'x' and df.loc[index, 'date'] < 2021-04-01:
df.loc[index, 'costs'] = 1
index += 1
elif i == 'x' and df.loc[index, 'date'] >= 2021-04-01:
df.loc[index, 'costs'] = 4
index += 1
elif i == 'y':
etc. etc.
...但是,当我确信可以以更简单的方式实现相同的结果时,这似乎相当冗长乏味。任何人都可以就如何在我的映射中包含“日期”元素提出解决方案吗?
编辑 - 下面的示例数据
date (dd-mm) product
01-02 x
01-02 y
01-02 z
01-03 x
01-03 y
01-03 z
01-04 x
01-04 y
01-04 z
变成……
date (dd-mm) product cost
01-02 x 1
01-02 y 2
01-02 z 3
01-03 x 1
01-03 y 2
01-03 z 3
01-04 x 4
01-04 y 2
01-04 z 3
【问题讨论】:
-
能否提供样本数据?
-
当然,请参阅编辑。
标签: python pandas dictionary for-loop mapping