gpt4 book ai didi

python - Pandas - 根据条件计算相关事件

转载 作者:行者123 更新时间:2023-12-01 03:03:03 25 4
gpt4 key购买 nike

我想创建 DataFrame,可能是稀疏的,它测量用户之间的相关性。在这里,我对 user_1 之间相关性的定义和 user_2是他们执行相同操作的次数 action在同一天。

我将尝试使用示例更好地解释自己。假设我有以下数据框:

date    action  user
6 2019-05-05 b user_3
9 2019-05-05 b user_2
1 2019-05-06 b user_2
5 2019-05-06 a user_1
0 2019-05-07 b user_3
7 2019-05-07 a user_2
8 2019-05-07 a user_1
2 2019-05-08 c user_2
4 2019-05-08 c user_1
3 2019-05-09 c user_3

可以使用以下代码段生成:
import numpy as np
import pandas as pd

np.random.seed(12)
users = np.random.choice(['user_1', 'user_2', 'user_3'], size=10)
actions = np.random.choice(['a', 'b', 'c'], size=10)
date = np.random.choice(pd.date_range(start='2019-05-05', end='2019-05-10', freq='D'), size=10)

df = pd.DataFrame(dict(date=date, action=actions, user=users))
df.date = pd.to_datetime(df.date)
df = df.sort_values('date')
user_1之间的相关性和 user_22因为他们都执行了操作 a当天 07和行动 c08 . user_2之间的相关性和 user_31因为他们执行了操作 b当天 05 .剩下的都是 NaN .他们输出我正在寻找的数据帧如下:
        user_1  user_2  user_3
user_1 NaN NaN NaN
user_2 2.0 NaN NaN
user_3 NaN 1.0 NaN

我创建此 DataFrame 的低效方法如下:
from itertools import combinations
df_result = pd.DataFrame(columns=['user_1', 'user_2', 'user_3'],
index=['user_1', 'user_2', 'user_3'], dtype=np.float64)

for index, group in df.groupby(['date', 'action']):
for x, y in combinations(list(group.user.values), 2):
if np.isnan(df_result.loc[x,y]):
df_result.loc[x, y] = 1
else:
df_result.loc[x, y] = df_result.loc[x, y] + 1

这种方法的问题是在我的用例中变慢。

最佳答案

这是一种潜在的方法,使用 merge , 自行加入 dateaction .然后使用 query , 过滤掉两边用户相等的地方,最后 pivot_table 为输出。

df_corr = (df.merge(df, on=['date', 'action'])
.query('user_x != user_y')
.pivot_table(index='user_x', columns='user_y', aggfunc='size'))

[出去]
user_y  user_1  user_2  user_3
user_x
user_1 NaN 2.0 NaN
user_2 2.0 NaN 1.0
user_3 NaN 1.0 NaN

如果只需要显示相关矩阵的下三角,您可以 NaN使用:
mask = np.triu_indices_from(df_corr)
df_corr.values[mask] = np.nan

[出去]
user_y  user_1  user_2  user_3
user_x
user_1 NaN NaN NaN
user_2 2.0 NaN NaN
user_3 NaN 1.0 NaN

关于python - Pandas - 根据条件计算相关事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com