python-3.x 如何使用Pandas apply函数的输出创建新的 Dataframe ?

ttisahbt  于 2023-02-14  发布在  Python
关注(0)|答案(1)|浏览(163)

我目前正在努力解决一个问题,我尽量不使用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创建一系列这样的时间增量(每个用户有不同数量的日志)?

mklgxw1f

mklgxw1f1#

您只需创建一个dict,其中键是用户ID,值是每个用户的相关DataFrame,没有必要将所有内容都保存在一个巨大的DataFrame中,除非您有数百万用户,而每个用户只有几条记录。

相关问题