我有一个时间序列数据集,有10个观测单位。每个观察单位每天都可以进行一段时间的活动。因此,我有(可以说)4个变量的数据帧:分组和转换熊猫数据
日期 - 最新 单位 - 观察 acitvity的单位 - 一些活动 CumHours - 由一个单位的活动花了几个小时的累计数。
我需要创建一个'Hours_calc'变量,表示每天每条线上的任何活动花费了多少小时。进口一切正常位的作品后,我这样做:
DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])
我相信我所需要的变换方法,我认为,通过转换功能(如指定)的第一个参数是DF列作为系列与agg()方法一样。是对的吗?
我写了下面的函数,但正如你所看到的,我不知道计算中是否应该指DF或DFGrouped,或者是什么?一般来说如何引用goruped数据中的行/列?另外,我是否有权尝试返回与groupby组相同长度的系列?
def WorkingHours(x, Column):
LISTHOURS = []
for row in xrange(1, len(x)):
Tot = int(DFGrouped[Column][row]) - int(DFGrouped[Column][row - 1])
LISTHOURS.append(Tot)
return pd.Series(LISTHOURS)
TESTDF = DFGrouped.transform({Hours_calc : lambda x : WorkingHours(x, 'CumHours')})
而且我没有看到有关传递一个快译通改造文档中任何东西,但我不能看到在gorup只有一个变量/列执行该功能的任何其他方式。
我在哪里错了?该错误消息很长,但令人困惑,但以“数据类型的转换函数无效”结束。
我不确定我是否正确理解您的问题,但不应该按日期,单位而不是按单位和活动进行分组?通过这种方式,您可以使用每个组的CumHours总和来获取所有活动的总小时支出。 – yemu
我不这么认为,我需要每天花费在任何活动上的时间。举例来说,假设在时间段内,单元1执行两个活动,而不一定在连续的几天。 CumHours测量该单位在当天进行的活动的累计时间。为了找到每日小时量度,我需要在给定的一天中累计小时数,并从执行该活动的最后一天中减去累计小时数。因此,按单位/活动进行分组并按日期排序, –
可以提供数据文件的示例,其中填充了一些数据? – yemu