Python 从数据帧中的列获取周数

Python 从数据帧中的列获取周数,python,python-3.x,Python,Python 3.x,我有以下数据帧(df1): 现在,我想在dataframe中基于前3列创建一个新列,其编号为weeknumber 我试过: df1['Weeknumber_TillDate'] =date(df1['Year'],df1['Month'],df1['Day']).isocalendar()[1] 这给了我一个错误: TypeError: cannot convert the series to <class 'int'> 结果: Year

我有以下数据帧(df1):

现在,我想在dataframe中基于前3列创建一个新列,其编号为weeknumber

我试过:

    df1['Weeknumber_TillDate'] 
    =date(df1['Year'],df1['Month'],df1['Day']).isocalendar()[1]
这给了我一个错误:

    TypeError: cannot convert the series to <class 'int'>
结果:

     Year   Month   Day Weeknumber_TillDate
     2019   10       28     44
我希望能够为我的整个数据帧(每一行)做到这一点

但我从另一个数据帧(df2)中获取我的年、月、日

因此,我:

     df1 = {'Year':df2.iloc[:,6],'Month':df2.iloc[:,7], 'Day' : 
     df2.iloc[:,8]}
这给了我df1,数据类型如下:

      YearSub                   int64
      MonthSub                  int64
      DaySub                    int64
当我这样做的时候:

     df1 = {'Year':[2019],'Month':[10], 'Day' : [28]}
2019、10和28也是int64


所以,我不知道为什么它不起作用。有什么建议吗

尝试使用df.iterrows()迭代整个数据帧


编辑:考虑到您的类型错误,您可能必须首先将输入数据转换为int。

尝试以下1行:

import pandas as pd
import datetime

df = pd.DataFrame({"Year": [2019, 2018, 2017, 2017], "Month": [1, 2, 3, 12], "Day": [1, 2, 3, 30]})

df["New"] = df.apply(lambda row:  datetime.datetime(row["Year"], row["Month"], row["Day"]).isocalendar()[1], axis=1)

print(df)

希望它有助于解决问题,如果有任何问题,请随时提问。

在使用.astype(int)进行编辑后是否可以再试一次?在我的情况下不起作用。阿蒂姆的建议奏效了。但是谢谢你的努力!!成功了!非常感谢。关于为什么会这样做有什么解释吗?@Steven31415这是pandas api,你可以从选定的行中给出fR值,然后pandas会做一些魔术,可能它们里面有for循环。但您需要使用apply方法来获得它。实际上,apply的存在是我的代码与您的代码的主要区别。
     df1 = {'Year':[2019],'Month':[10], 'Day' : [28]}
df1 = df1.assign(Weeknumber_TillDate = "")
for index, row in df1.iterrows():
   row['Weeknumber_TillDate'] = date(df1['Year'].astype('int64'),df1['Month'].astype('int64'),df1['Day'].astype('int64')).isocalendar()[1].astype('int64')
import pandas as pd
import datetime

df = pd.DataFrame({"Year": [2019, 2018, 2017, 2017], "Month": [1, 2, 3, 12], "Day": [1, 2, 3, 30]})

df["New"] = df.apply(lambda row:  datetime.datetime(row["Year"], row["Month"], row["Day"]).isocalendar()[1], axis=1)

print(df)