我有一个存储事务日志的数据框。每个日志都有自己的活动哈希值和相应的用户ID,例如
ID UserID
999974708546523127 AU896
999974708546523127 ZZ999
999974708546520000 ZZ999
我使用交叉表创建一个相关矩阵,以比较散列的用户活动。因此,我可以衡量他们的行为有多相似:
Data = pd.read_csv('path.csv',
sep=';', names=['ID', 'UserID', 'Info1', 'Info2'], error_bad_lines=False,
encoding='latin-1', dtype='category')
df = pd.crosstab(Data.UserID, Data.ID)
但是,由于我有大约500万行,并且ID活动哈希是如此复杂,因此计算所需的时间太长或根本无法完成。使用dtype = 'category'
已经大大减少了csv文件的读取时间。
预期的输出相关矩阵
Index AU896 ZZ999
AU896 1 0.5
ZZ999 0.5 1
我无法更改哈希或UserID来减少内存使用。
Info1和Info2的此操作分别需要6到3秒钟。
也许对熊猫甚至是黄昏者有更有效的操作吗?
谢谢您的帮助!
答案 0 :(得分:0)
不确定用例。由于您没有显示如何处理info1
或info2
列。所以我举一个一般的例子。
import pandas as pd
import io
data_string = '''ID,UserID,info1
999974708546523127,AU896,35
999974708546523127,ZZ999,45
999974708546520000,ZZ999,13
999974708546520000,AU896,13
999974708546523128,AU896,45
999974708546523128,ZZ999,12
999974708546520001,ZZ999,36
999974708546520001,AU896,37'''
df = pd.read_csv(io.StringIO(data_string))
# create a wide form of data from long
wide_df = df.pivot(index="ID", columns="UserID", values="info1").reset_index()
# build the correlation metrics from the wide form of data
corr_df = wide_df[["AU896", "ZZ999"]].corr()