Python 如何迭代Pandas.DataFrame中的列,并将函数的结果附加到同一行?

Python 如何迭代Pandas.DataFrame中的列,并将函数的结果附加到同一行?,python,pandas,csv,dataframe,datetime,Python,Pandas,Csv,Dataframe,Datetime,我通过以下CSV生成了一个Pandas.DataFrame: Category,Brand,Product Name,Price,Expiration Date, Package ID,Quantity Cat1,Brand1,Product1,$1000,07/14/2020,XXXXXX,34 我试图在CSV中添加一列,每行对应到期日期的快慢(4表示超过6个月,3表示3到6个月,等等) 我的问题是,当尝试将过期日期列转换为日期时间(使用pandas.to_datetime(df['Expi

我通过以下CSV生成了一个
Pandas.DataFrame

Category,Brand,Product Name,Price,Expiration Date, Package ID,Quantity
Cat1,Brand1,Product1,$1000,07/14/2020,XXXXXX,34
我试图在CSV中添加一列,每行对应到期日期的快慢(
4
表示超过6个月,
3
表示3到6个月,等等)

我的问题是,当尝试将
过期日期
列转换为日期时间(使用
pandas.to_datetime(df['Expiration Date'])
)并应用我的
classify_Expiration()
函数时,这些类型要么与函数指示的不匹配,要么它试图将函数应用于
索引0
,我认为这是标题(因此与
%m/%d/%Y
格式不匹配)。在调用
.apply()
之前,我已尝试在classification函数内以及在其外部将列转换为datetime。我还尝试使用
timedelta
将过期日期与今天的当前日期进行比较,但它不适用于
datetime.date.today()

以下是我尝试的第一种方法:

def分类_到期(第行):
一周=时间增量(周=1,天=0,小时=0,分钟=0,秒=0)

如果((一周*0)您需要在
days\u之间删除转换为datetime的功能,如果将
product\u sales['Expiration']=pd.to\u datetime(product\u sales['Expiration Date'])
分配回
product\u sales['Expiration']),然后使用
product\u sales['Expiration']

def days_between(date1, date2):
    """Calculates the number of days between two dates

    Keyword arguments:
    date1 -- The first date in the subtraction.
    date2 -- The second date in the subtraction.
    """
    return abs((date2 - date1).days)


product_sales['Expiration Date'] = pd.to_datetime(product_sales['Expiration Date'])

product_sales['Expiration Quartile'] = (product_sales['Expiration Date']
                                               .apply(classify_expiration))
print (product_sales)
  Category   Brand Product Name  Price Expiration Date Package ID  Quantity  \
0     Cat1  Brand1     Product1  $1000      2020-07-14     XXXXXX        34   

   Expiration Quartile  
0                    1  
Pandas具有binnig的特殊功能,因此您可以使用以下功能:

product_sales['Expiration Date'] = pd.to_datetime(product_sales['Expiration Date'])

product_sales['Expiration Quartile'] = (product_sales['Expiration Date']
                                             .apply(classify_expiration))

s = product_sales['Expiration Date'].sub(pd.to_datetime('today').floor('d')).dt.days

product_sales['Expiration Quartile1'] = pd.cut(s, 
                                               bins=[0, 30, 90,120, np.inf], 
                                               labels=[4,3,2,1])
print (product_sales)
  Category   Brand Product Name  Price Expiration Date Package ID  Quantity  \
0     Cat1  Brand1     Product1  $1000      2020-07-14     XXXXXX        34   
1     Cat1  Brand1     Product1  $1000      2020-01-13     XXXXXX        34   
2     Cat1  Brand1     Product1  $1000      2019-11-01     XXXXXX        34   
3     Cat1  Brand1     Product1  $1000      2020-01-15     XXXXXX        34   

   Expiration Quartile Expiration Quartile1  
0                    1                    1  
1                    3                    3  
2                    4                    4  
3                    2                    2