Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据分组与转换_Python_Pandas_Dataframe - Fatal编程技术网

Python 数据分组与转换

Python 数据分组与转换,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含10个观测单位的时间序列数据集。每一天,每个观察单位都可以参与一项活动,持续数小时。因此,我在一个数据帧中有(假设)4个变量: 日期-日期 观察单位 acitvity-一些活动 CumHours-单位在某项活动上花费的累计小时数 df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours']) grouped = df.groupby(['unit', 'activity']) shift_it = lambda x:

我有一个包含10个观测单位的时间序列数据集。每一天,每个观察单位都可以参与一项活动,持续数小时。因此,我在一个数据帧中有(假设)4个变量:

日期-日期 观察单位 acitvity-一些活动 CumHours-单位在某项活动上花费的累计小时数

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
shift_it = lambda x: (x - x.shift())
raw_hours = grouped.cumhours.transform(shift_it)
df.insert(0, 'raw_hours',raw_hours)
我需要创建一个“Hours\u calc”变量,该变量表示每天每行在任何活动上花费的小时数。导入所有正常位和片段后,我执行以下操作:

DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])
我认为我需要transform方法,并且我认为传递给transform函数的第一个参数(如指定的)是DF列作为一个系列,就像agg()方法一样。是这样吗

我编写了下面的函数,但正如您将看到的,我不知道在计算中是指DF还是DFGrouped,还是什么?一般来说,如何在被占用的数据中引用行/列?另外,我尝试返回与groupby group长度相同的序列对吗

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')})
此外,我在文档中没有看到任何关于将Dict传递给transform的内容,但我看不到任何其他方法仅对gorup中的一个变量/列执行函数


我哪里做错了?错误消息很长,令人困惑,但以“Transform function invalid for data types”(转换函数对数据类型无效)结尾。

我认为可以使用shift函数将分组数据中的列移动一行。然后,如果减去“原始”和“移位”,您将得到在活动上花费的原始小时数

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
shift_it = lambda x: (x - x.shift())
raw_hours = grouped.cumhours.transform(shift_it)
df.insert(0, 'raw_hours',raw_hours)
编辑1。 如果希望常规函数使用transform遍历系列元素,但不复制到列表,请尝试以下操作:

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
def trans_func(x):
    y=x.copy()
    for i in range(1,len(x.index)):
        x.iloc[i]=y.iloc[i]-y.iloc[i-1]
    return x

raw_hours = gr['cumhours'].transform(lambda x: trans_func(x))
df.insert(0, 'raw_hours',raw_hours)

我认为可以使用shift函数将分组数据中的列移动一行。然后,如果减去“原始”和“移位”,您将得到在活动上花费的原始小时数

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
shift_it = lambda x: (x - x.shift())
raw_hours = grouped.cumhours.transform(shift_it)
df.insert(0, 'raw_hours',raw_hours)
编辑1。 如果希望常规函数使用transform遍历系列元素,但不复制到列表,请尝试以下操作:

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
def trans_func(x):
    y=x.copy()
    for i in range(1,len(x.index)):
        x.iloc[i]=y.iloc[i]-y.iloc[i-1]
    return x

raw_hours = gr['cumhours'].transform(lambda x: trans_func(x))
df.insert(0, 'raw_hours',raw_hours)

我认为可以使用shift函数将分组数据中的列移动一行。然后,如果减去“原始”和“移位”,您将得到在活动上花费的原始小时数

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
shift_it = lambda x: (x - x.shift())
raw_hours = grouped.cumhours.transform(shift_it)
df.insert(0, 'raw_hours',raw_hours)
编辑1。 如果希望常规函数使用transform遍历系列元素,但不复制到列表,请尝试以下操作:

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
def trans_func(x):
    y=x.copy()
    for i in range(1,len(x.index)):
        x.iloc[i]=y.iloc[i]-y.iloc[i-1]
    return x

raw_hours = gr['cumhours'].transform(lambda x: trans_func(x))
df.insert(0, 'raw_hours',raw_hours)

我认为可以使用shift函数将分组数据中的列移动一行。然后,如果减去“原始”和“移位”,您将得到在活动上花费的原始小时数

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
shift_it = lambda x: (x - x.shift())
raw_hours = grouped.cumhours.transform(shift_it)
df.insert(0, 'raw_hours',raw_hours)
编辑1。 如果希望常规函数使用transform遍历系列元素,但不复制到列表,请尝试以下操作:

df = (mydata, columns = ['date', 'unit', 'activity', 'cumhours'])
grouped = df.groupby(['unit', 'activity'])
def trans_func(x):
    y=x.copy()
    for i in range(1,len(x.index)):
        x.iloc[i]=y.iloc[i]-y.iloc[i-1]
    return x

raw_hours = gr['cumhours'].transform(lambda x: trans_func(x))
df.insert(0, 'raw_hours',raw_hours)

我想我终于解决了这个问题。我怀疑yemu的答案是好的,但我更喜欢这样,因为这是一个最终学习如何应用自己功能的练习:

DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])

def WorkingHours(x):
    CumHoursList = list(x)
    HoursCalcList = []
    HoursCalcList.insert(0, CumHoursList[0])
    for index in xrange(1, len(CumHoursList)):
        CalcHoursList/insert(index, CumHoursList[index] - CumHoursList[index - 1])
    return CalcHoursList

DFGrouped['CumHours'].transform(lambda x: WorkingHours(x))

真有魅力

我想我终于解决了这个问题。我怀疑yemu的答案是好的,但我更喜欢这样,因为这是一个最终学习如何应用自己功能的练习:

DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])

def WorkingHours(x):
    CumHoursList = list(x)
    HoursCalcList = []
    HoursCalcList.insert(0, CumHoursList[0])
    for index in xrange(1, len(CumHoursList)):
        CalcHoursList/insert(index, CumHoursList[index] - CumHoursList[index - 1])
    return CalcHoursList

DFGrouped['CumHours'].transform(lambda x: WorkingHours(x))

真有魅力

我想我终于解决了这个问题。我怀疑yemu的答案是好的,但我更喜欢这样,因为这是一个最终学习如何应用自己功能的练习:

DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])

def WorkingHours(x):
    CumHoursList = list(x)
    HoursCalcList = []
    HoursCalcList.insert(0, CumHoursList[0])
    for index in xrange(1, len(CumHoursList)):
        CalcHoursList/insert(index, CumHoursList[index] - CumHoursList[index - 1])
    return CalcHoursList

DFGrouped['CumHours'].transform(lambda x: WorkingHours(x))

真有魅力

我想我终于解决了这个问题。我怀疑yemu的答案是好的,但我更喜欢这样,因为这是一个最终学习如何应用自己功能的练习:

DF = (mydata, columns = ['Date', 'Unit', 'Activity', 'CumHours'])
DF['Hours_calc'] = np.nan
DFGrouped = DF.groupby(['Unit', 'Activity'])

def WorkingHours(x):
    CumHoursList = list(x)
    HoursCalcList = []
    HoursCalcList.insert(0, CumHoursList[0])
    for index in xrange(1, len(CumHoursList)):
        CalcHoursList/insert(index, CumHoursList[index] - CumHoursList[index - 1])
    return CalcHoursList

DFGrouped['CumHours'].transform(lambda x: WorkingHours(x))

真有魅力

我不确定我是否正确理解了你的问题,但你不应该按日期、单位而不是按单位和活动分组吗?这样你就可以用每个小组的总小时数来计算所有活动的总小时数。我不这么认为,我需要每天花在任何活动上的小时数。例如,假设在时间段unit1执行两个活动,不一定是连续几天。CumHours度量该单位在当天进行的活动上花费的累计时间。为了找到每日小时数,我需要计算给定一天的累计小时数,并从最后一天的活动中减去累计小时数。因此,按单位/活动分组和按日期排序。您能提供数据文件的示例并填写一些数据吗?我可以提供一些说明性数据。你认为语法/概念正确吗?我不确定我是否正确理解你的问题,但你不应该按日期、单位而不是按单位和活动分组吗?这样你就可以用每个小组的总小时数来计算所有活动的总小时数。我不这么认为,我需要每天花在任何活动上的小时数。例如,假设在时间段unit1执行两个活动,不一定是连续几天。CumHours度量该单位在当天进行的活动上花费的累计时间。为了找到每日小时数,我需要计算给定一天的累计小时数,并从最后一天的活动中减去累计小时数。因此,按单位/活动分组和按日期排序。您能提供数据文件的示例并填写一些数据吗?我可以提供一些说明性数据。你认为语法/概念正确吗?我不确定我是否正确理解你的问题,但你不应该按日期、单位而不是按单位和活动分组吗?这样你就可以用每个小组的总小时数来计算所有活动的总小时数。我不这么认为,我需要每天花在任何活动上的小时数。例如,假设在时间段unit1执行两个活动,不一定是连续几天。CumHours度量该单位在当天进行的活动上花费的累计时间。为了找到每日小时数,我需要计算给定一天的累计小时数,并从最后一天的活动中减去累计小时数。因此,groupi