获取python groupby中字符串的第一次和最后一次出现

获取python groupby中字符串的第一次和最后一次出现,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个python数据框架,其中包含以下列趋势数据 Empcode T01 T01 T02 T03 T04 TranDate 10/09/2018 10/09/2018 10/09/2018 10/09/2018 10/09/2018 Trn Time 09.29 17.54 13.52 10.01 18.01 对于给定的传输日期和Em

我有一个python数据框架,其中包含以下列趋势数据

Empcode     T01         T01          T02          T03          T04
TranDate    10/09/2018  10/09/2018   10/09/2018   10/09/2018   10/09/2018
Trn Time    09.29       17.54        13.52        10.01        18.01
对于给定的传输日期和Empcode,我想获取第一次出现的Trn Time作为In Time,最后一次出现的TrnTime作为Out Time

如果密钥只有一条记录,则时间应按时间输入输出

g=df.groupby(['Empcode','TrnDate'])

print (pd.DataFrame({'In':g.TrnTime.nth(0),'out':g.TrnTime.nth(-1)}))
上述代码适用于Empcode和TranDate有2条记录的地方

如果只有一条记录,它就不起作用

如果密钥只有一条记录,则时间应输入输出 时间

那就这样吧。定义一个执行此操作的函数,并将其传递给GroupBy.apply:


“TranDate”和“Trn Time”不在df.columns中,您好吗grouping@pyd好问题,我没有说得很明显,但我加载了数据,然后进行了转置。加载时,指定header=None和index_col=0,然后进行转置。
def fnc(g):
    res = {'Out': g.iat[-1]}
    if len(g) > 1:
        res['In'] = g.iat[0]
    return res

dfres = df.groupby(['Empcode','TranDate'])['Trn Time'].apply(fnc).unstack()
print(dfres)
                       In    Out
Empcode TranDate                
T01     10/09/2018  09.29  17.54
T02     10/09/2018    NaN  13.52
T03     10/09/2018    NaN  10.01
T04     10/09/2018    NaN  18.01