为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫中创建公司周数和年份

在熊猫中创建公司周数和年份

白衣染霜花 2021-07-15 17:11:04
假设我们有以下 dfimport pandas as pddata = {'Dates' : ['2018-10-15', '2018-02-01', '2018-04-01']}data['Dates'] = pd.to_datetime(data.Dates)print(df)    Dates0   2018-10-151   2018-02-012   2018-04-01在我现在的公司,我们有一个财务周结构,我通常使用 excel 来计算,我想用 Python 来做这个我使用 DateTime 模块来解决我的条件,如下所示如果月份是>= 4(四月),则周数为 1(所以我取 ISO 周数并减去 13)如果月份是< 4我加39。我对 YEAR 使用相同的逻辑 if >= 4 then year + 1 else YEAR我想我可以使用一个简单的 for 循环,我可以在我的数据帧上使用它for x in data.Dates:    if x.dt.month >= 4:       df['Week'] = x.dt.week - 13    else:        df['Week'] = x.dt.week + 39和一年for x in data.Dates:    if x.dt.month >= 4:       df['Year'] = FY & x.dt.year + 1    else:         df['Year'] = FY & x.dt.year但是,>= 4两者都会引发公式错误。File "<ipython-input-38-eadb99fdd9db>", line 4    df.Dates.dt.month > 4:                          ^SyntaxError: invalid syntax但是,如果我这样做data['Week'] = data.Dates.dt.week这给出了所有的周数,我在这里是否遗漏了一些基本的或必不可少的东西?我希望这是清晰简洁的,任何建议(甚至如何提出更好的问题)都值得赞赏。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

不要使用显式循环

Pandas 擅长矢量化操作。不需要for循环。例如,您可以使用numpy.where有条件地创建一个系列:


import numpy as np


data['Week'] = np.where(data['Dates'].dt.month >= 4, data['Dates'].dt.week - 13,

                        data['Dates'].dt.week + 39)

您的代码不起作用的原因是您正在更新每个循环中的整个系列,而不是系列中的元素。换句话说,您正在将元素逻辑应用于一个系列。


查看完整回答
反对 回复 2021-07-27
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号