假设我们有以下 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)
您的代码不起作用的原因是您正在更新每个循环中的整个系列,而不是系列中的元素。换句话说,您正在将元素逻辑应用于一个系列。
添加回答
举报
0/150
提交
取消