我有一个数据框,其中包含不同日复一日日志的条目。但是某些登录和注销值在同一天发生。 例如 df
groupby
我正在尝试压缩/合并日期与一行相似的行。 我的目标是实现以下目标:
df.groupBy('state').pivot('gender').agg(F.collect_list('Name')).show()
# +-----+----------+------+
# |state| Female| Male|
# +-----+----------+------+
# | NY|[Ana, Amy]|[Alex]|
# | GA| [Mary]|[John]|
# +-----+----------+------+
我在SO上尝试了其他一些类似的问题,但注销时间不起作用。
答案 0 :(得分:1)
您可以创建一个新列来跟踪登录日期,然后可以使用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