我目前正在努力解决一个问题,我尽量不使用for循环(尽管这会让我更容易理解),而是使用“Pandas”方法。
我面临的问题是我有一个很大的日志 Dataframe allLogs,如下所示:
index message date_time user_id
0 message1 2023-01-01 09:00:49 123
1 message2 2023-01-01 09:00:58 123
2 message3 2023-01-01 09:01:03 125
... etc
我正在对每个user_id进行分析,为此我编写了一个函数。此函数需要 allLogs Dataframe 的子集:每个user_id的所有id、消息和date_times。可以这样想:对于每个唯一的user_id我都要运行这个函数。
这个函数计算每条消息之间的日期时间,并使用所有这些时间增量(时差)创建一个Series。我想将其创建为一个单独的 Dataframe ,对于每个唯一的user_id,我都有一个很大的时间增量列表/series/array。
当前函数如下所示:
def makeSeriesPerUser(df):
df = df[['message','date_time']]
df = df.drop_duplicates(['date_time','message'])
df = df.sort_values(by='date_time', inplace = True)
m1 = (df['message'] == df['message'].shift(-1))
df = df[~(m1)]
df = (df['date_time'].shift(-1) - df['date_time'])
df = df.reset_index(drop=True)
seconds = m1.astype('timedelta64[s]')
return seconds
我使用allLogs.groupby('user_id').apply(lambda x: makeSeriesPerUser(x))
将其应用到我的user_id组。
我如何创建一个新的 Dataframe ,而不是返回一些东西并将其添加到现有的 Dataframe 中,为每个唯一的user_id创建一系列这样的时间增量(每个用户有不同数量的日志)?
1条答案
按热度按时间mklgxw1f1#
您只需创建一个dict,其中键是用户ID,值是每个用户的相关DataFrame,没有必要将所有内容都保存在一个巨大的DataFrame中,除非您有数百万用户,而每个用户只有几条记录。