[英]Pandas crosstab on dataframe index
我有一個存儲事務日志的數據幀。 每個日志都有自己的活動哈希和相應的用戶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)
但是,由於我有大約5百萬行,並且ID活動哈希值很復雜,因此計算時間過長或根本無法完成。 使用dtype = 'category'
顯着減少了csv文件的讀取時間。
預期的輸出相關矩陣
Index AU896 ZZ999
AU896 1 0.5
ZZ999 0.5 1
我無法更改哈希值和UserID以減少內存使用量。
Info1和Info2的操作需要6秒和3秒。
也許有更高效的操作來做大熊貓甚至是dask嗎?
謝謝您的幫助!
不完全確定用例。 因為您沒有顯示如何處理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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.