簡體   English   中英

數據幀索引上的熊貓交叉表

[英]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嗎?

謝謝您的幫助!

不完全確定用例。 因為您沒有顯示如何處理info1info2列。 所以我給出一個一般的例子。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM