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

假设我们有以下 df


import pandas as pd


data = {'Dates' : ['2018-10-15', '2018-02-01', '2018-04-01']}

data['Dates'] = pd.to_datetime(data.Dates)


print(df)

    Dates

0   2018-10-15

1   2018-02-01

2   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


这给出了所有的周数,我在这里是否遗漏了一些基本的或必不可少的东西?


我希望这是清晰简洁的,任何建议(甚至如何提出更好的问题)都值得赞赏。


白衣染霜花
浏览 182回答 1
1回答

HUH函数

不要使用显式循环Pandas 擅长矢量化操作。不需要for循环。例如,您可以使用numpy.where有条件地创建一个系列:import numpy as npdata['Week'] = np.where(data['Dates'].dt.month >= 4, data['Dates'].dt.week - 13,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data['Dates'].dt.week + 39)您的代码不起作用的原因是您正在更新每个循环中的整个系列,而不是系列中的元素。换句话说,您正在将元素逻辑应用于一个系列。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python