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

阿什顿·海尔维格(Ashton Hellwig)

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

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个月之间,依此类推)。

我的问题是,当尝试将Expiration Date转换为日期时间(使用pandas.to_datetime(df['Expiration Date'])),然后应用我的classify_expiration()函数时,类型要么与函数指示的内容不匹配,要么尝试将函数应用于index 0我认为是标头的函数(并且因此与%m/%d/%Y格式不匹配)。我试图在分类函数内以及.apply()调用之前将其转换为datetime 我还尝试使用timedelta比较到期日期和今天的当前日期,但是不适用于datetime.date.today()

这是我尝试的第一种方式:

def classify_expiration(row):    
    one_week = timedelta(weeks=1, days=0, hours=0, minutes=0, seconds=0)

    if ((one_week * 0) <= (date.today() - row['Expiration Date']) <= (one_week * 4)):
        return 4

这种方式给我有关类型错误的错误,这些错误是index 0不能正确使用或不能将功能应用于系列的。

这是我刚刚尝试过的,给了我一个AssertionError

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.
    """
    date1 = datetime.strptime(date1, '%m/%d/%Y')
    date2 = datetime.strptime(date2, '%m/%d/%Y')
    return abs((date2 - date1).days)


def classify_expiration(row):
    """Calculate days/weeks to expiration. Assign quartile based on value.

    Keyword arguments:
    row -- row in a `pandas.core.frame.DataFrame` object. e.g. `df['A']`
    """

    date_today = datetime.strptime(
        date.today().strftime('%m/%d/%Y'), '%m/%d/%Y')

    if (days_between(row, date_today) <= 30):
        return 4
    if (31 <= days_between(row, date_today) <= 90):
        return 3
    if (91 <= days_between(row, date_today) <= 120):
        return 2
    if (days_between(row, date_today) >= 121):
        return 1

这是我尝试应用该功能的地方:

# Convert column to `datetime` if its current type is str
pd.to_datetime(product_sales['Expiration Date'])

# Applying the `classify_expiration()` function
product_sales['Expiration Quartile'] = product_sales.apply(
    lambda row: classify_expiration(row), axis=1
)

我希望该函数向DataFrame追加一个新列,该列包含每行中到期日期的生成的四分位数。我会得到其范围从错误中AssertionErrorargument 1 must be str, not Series以及与其他各种错误index 0

耶斯列尔

days_between如果分配回去product_sales['Expiration Date'] = pd.to_datetime(product_sales['Expiration Date']),则需要在函数中删除转换为日期时间,然后product_sales['Expiration Date'].apply(classify_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的特殊功能,因此可以使用cut以下功能

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  

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Pandas数据框中的列上进行迭代和执行操作

来自分类Dev

Pandas Dataframe:删除重复的行并将数据附加到剩余的唯一行

来自分类Dev

如何在 Pandas 的 DataFrame 中的列上应用 if between 函数

来自分类Dev

减去多列并将结果附加到pandas DataFrame中

来自分类Dev

Pandas groupby,如何在多个列上进行多个聚合?

来自分类Dev

如何在Pandas Dataframe中迭代计数

来自分类Dev

如何在同一数据框中将列求和并将结果附加为行?

来自分类Dev

如何使用外壳程序脚本在csv的第二行上进行文本处理并将特定的处理后的行结果附加到CSV中的新列中?

来自分类Dev

如何在R中的每一行的一组变体上进行变异?

来自分类Dev

如何在行中的sql中将两个值相乘并将结果放在同一行中的另一个单元格中?

来自分类Dev

迭代列并将该列的每一行值与 Pandas 中另一列的值进行比较

来自分类Dev

如何在Pandas DataFrame中的一行中传递XML中不同标签的元素?

来自分类Dev

如何在python中对pandas数据帧的每一行进行计算?

来自分类Dev

如何在PostgreSQL的结果列上进行累加和运算?

来自分类Dev

如何逐行比较单个文件中的行并将输出附加到同一文件

来自分类Dev

如何在Pandas DataFrame中获得最小值不为零的第一行索引?

来自分类Dev

如何在Pandas DataFrame中使用函数

来自分类Dev

Python - 如何将项目附加到某个元素的同一行上创建的列表中?

来自分类Dev

如何在结果列表上进行 map() 并将结果数组设置为 reactjs 中组件的状态

来自分类Dev

Pandas DataFrame-如何在多个列上应用Lambda函数并创建一个新列

来自分类Dev

如何在同一行中打印相同记录的多个结果?

来自分类Dev

实现Mysql连接。如何在同一行中获取结果?

来自分类Dev

如何在同一行中打印相同记录的多个结果?

来自分类Dev

如何在Pandas中重塑或旋转DataFrame

来自分类Dev

如何在Pandas Python中创建DataFrame

来自分类Dev

如何在 Pandas DataFrame 中添加条目?

来自分类Dev

如何在 Pandas DataFrame 中减去时间

来自分类Dev

Pandas - 如果在一行中满足条件,则将值添加到前一行而不进行迭代

来自分类Dev

如何在同一行中打印匹配的行?

Related 相关文章

  1. 1

    如何在Pandas数据框中的列上进行迭代和执行操作

  2. 2

    Pandas Dataframe:删除重复的行并将数据附加到剩余的唯一行

  3. 3

    如何在 Pandas 的 DataFrame 中的列上应用 if between 函数

  4. 4

    减去多列并将结果附加到pandas DataFrame中

  5. 5

    Pandas groupby,如何在多个列上进行多个聚合?

  6. 6

    如何在Pandas Dataframe中迭代计数

  7. 7

    如何在同一数据框中将列求和并将结果附加为行?

  8. 8

    如何使用外壳程序脚本在csv的第二行上进行文本处理并将特定的处理后的行结果附加到CSV中的新列中?

  9. 9

    如何在R中的每一行的一组变体上进行变异?

  10. 10

    如何在行中的sql中将两个值相乘并将结果放在同一行中的另一个单元格中?

  11. 11

    迭代列并将该列的每一行值与 Pandas 中另一列的值进行比较

  12. 12

    如何在Pandas DataFrame中的一行中传递XML中不同标签的元素?

  13. 13

    如何在python中对pandas数据帧的每一行进行计算?

  14. 14

    如何在PostgreSQL的结果列上进行累加和运算?

  15. 15

    如何逐行比较单个文件中的行并将输出附加到同一文件

  16. 16

    如何在Pandas DataFrame中获得最小值不为零的第一行索引?

  17. 17

    如何在Pandas DataFrame中使用函数

  18. 18

    Python - 如何将项目附加到某个元素的同一行上创建的列表中?

  19. 19

    如何在结果列表上进行 map() 并将结果数组设置为 reactjs 中组件的状态

  20. 20

    Pandas DataFrame-如何在多个列上应用Lambda函数并创建一个新列

  21. 21

    如何在同一行中打印相同记录的多个结果?

  22. 22

    实现Mysql连接。如何在同一行中获取结果?

  23. 23

    如何在同一行中打印相同记录的多个结果?

  24. 24

    如何在Pandas中重塑或旋转DataFrame

  25. 25

    如何在Pandas Python中创建DataFrame

  26. 26

    如何在 Pandas DataFrame 中添加条目?

  27. 27

    如何在 Pandas DataFrame 中减去时间

  28. 28

    Pandas - 如果在一行中满足条件,则将值添加到前一行而不进行迭代

  29. 29

    如何在同一行中打印匹配的行?

热门标签

归档