Dado este marco de datos:
HOUSEID PERSONID STRTTIME ENDTIME TDTRPNUM
0 20000017 1 955 1020 1
1 20000017 1 1130 1132 2
2 20000017 1 1330 1400 3
3 20000017 2 958 1020 1
4 20000017 2 1022 1025 2
5 20000017 2 1120 1122 3
6 20000017 2 1130 1132 4
Quiero crear 2 columnas nuevas firsttrip_time
y lasttrip_time
. Luego, agregue STRTTIME
a firsttrip_time
para el número mínimo de TDTRPNUM
, y agregue ENDTIME
a lasttrip_time
para el número máximo de TDTRPNUM
en cada Categoría HOUSEID
y PERSONID
.
Resultados:
HOUSEID PERSONID firsttrip_time lasttrip_time
0 20000017 1 955 1400
1 20000017 2 958 1132
He intentado esto para obtener la mezcla y el máximo, pero no tengo idea de cómo continuar el proceso.
grouped = df.groupby(['HOUSEID', 'PERSONID','STRTTIME', 'ENDTIME'])['TDTRPNUM']
max = grouped.max()
min = grouped.min()
¿Puedes ayudarme con esto o darme una pista?
Gracias
3 respuestas
Use groupby
con agg
y, finalmente, rename
sus columnas:
print (df.sort_values(["HOUSEID","PERSONID","TDTRPNUM"])
.groupby(["HOUSEID", "PERSONID"], as_index=False)
.agg({"STRTTIME":"first","ENDTIME":"last"})
.rename(columns={"STRTTIME":"firsttrip_time","ENDTIME":"lasttrip_time"}))
HOUSEID PERSONID firsttrip_time lasttrip_time
0 20000017 1 955 1400
1 20000017 2 958 1132
Puede evitar groupby
primero sort_values
por TDTRPNUM y luego usar drop_duplicates
con una vez primero con STRTTIME para obtener la fila con un mínimo de TDTRPNUM y una última vez con ENDTIME para obtener la fila con un máximo de TDTRPNUM , merge
ambos y rename
para obtener el resultado esperado
df_ = df.sort_values('TDTRPNUM')
res = (df_.drop_duplicates(['HOUSEID','PERSONID'], keep='first')
[['HOUSEID','PERSONID', 'STRTTIME']]\
.merge(df_.drop_duplicates(['HOUSEID','PERSONID'], keep='last')
[['HOUSEID','PERSONID', 'ENDTIME']])\
.rename(columns={'STRTTIME':'firsttrip_time',
'ENDTIME':'lasttrip_time'})
)
print(res)
HOUSEID PERSONID firsttrip_time lasttrip_time
0 20000017 1 955 1400
1 20000017 2 958 1132
Puedes probar esta opción:
aggFunc = {'STRTTIME':['min'], 'ENDTIME':['max']}
df = df.groupby(['HOUSEID','PERSONID']).agg(aggFunc).reset_index()
print(df)
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.