【问题标题】:Apply def function to a dataframe recursively递归地将 def 函数应用于数据帧
【发布时间】:2019-12-05 20:29:14
【问题描述】:

我正在尝试“递归”计算 Cat 的列值

每个循环都应计算一组 x 的 Cat 列最大值 (Catz)。如果日期范围变为

引用了 [1]:Calculate DataFrame values recursively 和 [2]:python pandas- apply function with two arguments to columns。我仍然不太了解系列/数据框概念以及如何应用任一结果

import pandas as pd
import numpy as np
from datetime import datetime
from datetime import datetime as dt
from datetime import timedelta
import time
from datetime import date
dict = {'x':["ASPELBJNMI", "JUNRNEXCRG", "ASPELBJNMI", "JUNRNEXCRG"], 
        'start': ["6/27/2018", "8/4/2018", "8/22/2018", "8/12/2018"], 
        'finish':["8/11/2018", "10/3/2018", "8/31/2018", "10/26/2018"],
        'DateRange':[0,0,0,0],
        'Cat':[-1,-1,-1,-1],
        'ID':[1,2,3,4]} 

df = pd.DataFrame(dict)

df.set_index('ID')
def classd(houp):
    Catz = houp.Cat.min()
    Catz +=1

    houp  = houp.groupby('x')
    for x, houp2 in houp:


        houp.DateRange  = (pd.to_datetime(houp.finish.loc[:]).min()- houp.start.loc[:]).astype('timedelta64[D]')

    houp.Cat = np.where(houp.DateRange<=60, Catz , -1)
    return houp

df['Cat'] =  df[['x','DateRange','Cat']].apply(classd, axis=1).Cat
print df

我在运行代码时得到以下 Traceback

Catz = houp.Cat.min() AttributeError: ("'long' object has no attribute 'min'", u'occurred at index 0')

期望的结果

   OBJECTID_1 * Conc *  ID  start   finish  DateRange   Cat
1   ASPELBJNMI  LAPMT   6/27/2018   8/11/2018   45  0
2   ASPELBJNMI  KLKIY   8/22/2018   8/31/2018   9   1
15  JUNRNEXCRG  CGCHK   8/4/2018    10/3/2018   60  1
16  JUNRNEXCRG  IQYGJ   8/12/2018   10/26/2018  83  -1

【问题讨论】:

    标签: python pandas dataframe recursion user-defined-functions


    【解决方案1】:

    你的程序理解起来有点复杂

    但我建议尝试一些简单的应用功能:

    s.apply(lambda x: x ** 2)
    

    这里s是一个系列

    https://pandas.pydata.org/docs/reference/api/pandas.Series.apply.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2019-02-11
      • 1970-01-01
      • 2016-04-04
      • 2020-05-28
      • 1970-01-01
      相关资源
      最近更新 更多