【发布时间】:2018-02-01 17:26:47
【问题描述】:
我正在尝试对 groupby 结果的所有行进行操作。 基本上我有以下内容:
import pandas as pd
import numpy as np
def tdiff(dff):
# return(dff[dff.task.eq('d')].start - dff[dff.task.ne('d')].end)
return(dff[dff.task.eq('d')].start - dff.end)
a = []
p = 0
while p < 6:
i = 0
while i < 4:
a.insert(i,p)
i = i + 1
p = p + 1
d={'task':pd.Series(6*['a','b','c','d'],name='task'),
'jobid':pd.Series(a),
'start':pd.Series(np.random.randn(24)),
'end':pd.Series(np.random.randn(24))}
df = pd.DataFrame(d)
print(df)
dt = df.groupby('jobid').apply(tdiff)
dt.name='tdiff'
print(type(dt))
print(dt)
除了我在每个组中有十几个不同的“任务”(a、b、c、d、....z)。并且并非所有组都保证拥有除任务“d”之外的所有任务。除了任务“d”之外,至少还有 1 个任务。
在每个 groupby 结果中,我想获得所有其他任务的 d.start 和 end 之间的差异。 我该怎么做?
我尝试了一个 apply 函数,它似乎返回了一个系列。但是除了'd'之外的所有东西我都得到NaN。我想我不确定如何从每个组中所有其他任务的“开始”值中减去 d.end。
谢谢!
【问题讨论】: