Python 熊猫基于相同的日期合并行
我有一个数据框架,其中包含不同的日常日志条目。但是一些登录和注销值在同一天发生。 例如 df 我正在尝试将日期相似的行压缩/合并为一行。 我的目标是实现以下目标:Python 熊猫基于相同的日期合并行,python,database,pandas,merge,Python,Database,Pandas,Merge,我有一个数据框架,其中包含不同的日常日志条目。但是一些登录和注销值在同一天发生。 例如 df 我正在尝试将日期相似的行压缩/合并为一行。 我的目标是实现以下目标: +-------+-----------------------------+--------------+-----------------------------+---------------+-----------+------------+ | Id | LoginTime | Lo
+-------+-----------------------------+--------------+-----------------------------+---------------+-----------+------------+
| Id | LoginTime | LoginReading | LogoutTime | LogoutReading | Available | Calculated |
+-------+-----------------------------+--------------+-----------------------------+---------------+-----------+------------+
| 10036 | 2019-11-06 10:37:18.3743184 | 5054.68 | 2019-11-06 14:11:52.4833904 | 5057.94 | 500 | 530 |
| 10036 | 2019-11-11 12:46:20.7018683 | 4797.39 | 2019-11-11 18:09:55.8326356 | 4892.33 | 500 | 1772 |
| 10036 | 2019-11-14 08:08:00.6290260 | 5080.59 | 2019-11-14 18:43:31.8609822 | 5185.65 | 500 | 2528 |
| 10036 | 2019-11-15 06:00:48.4777280 | 5185.65 | 2019-11-15 06:31:55.0281168 | 5199.28 | 500 | 260 |
+-------+-----------------------------+--------------+-----------------------------+---------------+-----------+------------+
我尝试了其他一些类似的问题,但注销时间不起作用。您可以创建一个新列,跟踪登录日期,然后可以使用
groupby()
和agg()
编译所需的值:
df['Day'] = df['LoginTime'].str.extract(r'^(\d{4}-\d{2}-\d{2})')
df.groupby('Day').agg({'Id': 'first', 'LoginTime': 'first', 'LoginReading': 'first', 'LogoutTime': 'last',
'LogoutReading': 'last', 'Available': 'first', 'Calculated': 'sum'}).reset_index(drop=True)
收益率:
Id LoginTime LoginReading \
0 10036 2019-11-06 10:37:18.3743184 5054.68
1 10036 2019-11-11 12:46:20.7018683 4797.39
2 10036 2019-11-14 08:08:00.6290260 5080.59
3 10036 2019-11-15 06:00:48.4777280 5185.65
LogoutTime LogoutReading Available Calculated
0 2019-11-06 14:11:52.4833904 5057.94 500 530
1 2019-11-11 18:09:55.8326356 4892.33 500 1772
2 2019-11-14 18:43:31.8609822 5185.65 500 2528
3 2019-11-15 06:31:55.0281168 5199.28 500 260
您是否只想获取第一个LoginTime条目和最后一个LogoutTime条目,这些条目仅在同一天按顺序出现?@rahlf23,是的,但还有其他列需要agg。如果登录日期/天和注销日期/天不同,如loginTime=`2019-11-06 10:37:18.3743184`和logoutTime=
2019-11-07 00:11:52.4833904
Id LoginTime LoginReading \
0 10036 2019-11-06 10:37:18.3743184 5054.68
1 10036 2019-11-11 12:46:20.7018683 4797.39
2 10036 2019-11-14 08:08:00.6290260 5080.59
3 10036 2019-11-15 06:00:48.4777280 5185.65
LogoutTime LogoutReading Available Calculated
0 2019-11-06 14:11:52.4833904 5057.94 500 530
1 2019-11-11 18:09:55.8326356 4892.33 500 1772
2 2019-11-14 18:43:31.8609822 5185.65 500 2528
3 2019-11-15 06:31:55.0281168 5199.28 500 260