- Employees table:
- +--------+------------+---------+----------+
- | emp_id | event_day | in_time | out_time |
- +--------+------------+---------+----------+
- | 1 | 2020-11-28 | 4 | 32 |
- | 1 | 2020-11-28 | 55 | 200 |
- | 1 | 2020-12-03 | 1 | 42 |
- | 2 | 2020-11-28 | 3 | 33 |
- | 2 | 2020-12-09 | 47 | 74 |
- +--------+------------+---------+----------+
- +------------+--------+------------+
- | day | emp_id | total_time |
- +------------+--------+------------+
- | 2020-11-28 | 1 | 173 |
- | 2020-11-28 | 2 | 30 |
- | 2020-12-03 | 1 | 41 |
- | 2020-12-09 | 2 | 27 |
- +------------+--------+------------+
- import pandas as pd
-
-
- def total_time(employees: pd.DataFrame) -> pd.DataFrame:
- employees['inter_time'] = employees['out_time'] - employees['in_time']
- employees = employees.groupby(['emp_id', 'event_day'])['inter_time'].sum()
- print(employees)
- print(type(employees))
- emp_id event_day
- 1 2020-11-28 173
- 2020-12-03 41
- 2 2020-11-28 30
- 2020-12-09 27
- Name: inter_time, dtype: Int64
- <class 'pandas.core.series.Series'>
- import pandas as pd
-
-
- def total_time(employees: pd.DataFrame) -> pd.DataFrame:
- employees['inter_time'] = employees['out_time'] - employees['in_time']
- employees = employees.groupby(['emp_id', 'event_day'])['inter_time'].sum().reset_index()
- print(employees)
- print(type(employees))
- emp_id event_day inter_time
- 0 1 2020-11-28 173
- 1 1 2020-12-03 41
- 2 2 2020-11-28 30
- 3 2 2020-12-09 27
- <class 'pandas.core.frame.DataFrame'>
reset_index() 是 pandas 库中的一个方法,它的主要作用是对索引进行重置。当你使用 groupby 方法对数据进行聚合后,你会得到一个 Series,这个 Series 的索引是组合的列名(在你的例子中是 'emp_id' 和 'event_day',多重索引)。reset_index() 方法将这个索引重置为默认的整数索引,并且如果需要的话,它还可以创建一个新的列来保存原来的索引。
在你的例子中,reset_index() 将根据 'emp_id' 和 'event_day' 的值为新的 DataFrame 创建索引,而原本的数值则作为新的 DataFrame 的一列,这就是为什么 reset_index() 能够将 Series 转化为 DataFrame 的原因。
因此,reset_index() 方法是一个非常实用的工具,可以帮助你在进行数据聚合操作后,将结果从 Series 格式转化为更易于分析和使用的 DataFrame 格式。
- import pandas as pd
-
-
- def total_time(employees: pd.DataFrame) -> pd.DataFrame:
- employees['inter_time'] = employees['out_time'] - employees['in_time']
- employees: pd.DataFrame = employees.groupby(['emp_id', 'event_day'])['inter_time'].sum().reset_index()
- employees.rename(columns={'event_day': 'day', 'inter_time': 'total_time'}, inplace=True)
- return employees[['day', 'emp_id', 'total_time']]