具有 4000 个独特类别的大文件上的 Python 数据透视表

标签 python pandas pivot

我有一个数据框

  ClientId  Scrips   Scrips_viewed
0    A123    Ibank           5
1    B234    SteelCorp      10
2    B234    KTTelecom       8
3    A123    JKFlights       5
4    A123    BPharma         3

我正在尝试使用列中的所有唯一脚本和索引列中的所有客户端 ID 以及各自列中的 View 来执行数据透视表。

data.shape为741206行×3列

df_matrix = pd.pivot_table(data, values='Scrips_viewed', index='ClientId', columns='Scrips')

但是我的电脑挂起,我必须重新启动它。

我的独特 Scrips 数量是 4200,即。 4200 个专栏,我的唯一客户是 85,000 个。 我的内存是 16 GB

我的错误是

else:
   1231         # Note that no copy of zero-sized arrays is made. However since they

MemoryError: 

Memory_usage(deep=True)

Index                   80
ClientId         11354188
Scrips             1921078
Scrips_viewed     5929648
dtype: int64

最佳答案

您可以通过将字符串列转换为 categoricals 来减少数据帧占用的内存。 .

data[["ClientId", "Scrips"]] = data[["ClientId", "Scrips"]].astype('category')

然后尝试旋转。

关于具有 4000 个独特类别的大文件上的 Python 数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454555/

相关文章:

python - Django Queryset - 获取最后一个相关对象并按其数据过滤

python - unittest blacklist namespace 并且任何引用它的尝试都失败

python - 动态向数组添加新行

python - 在 Python Pandas Dataframe 中计算百分位数

SQL 数据透视 : One To Many

Python for 循环返回 NaN 而不是字符串输出

python - Pandas 向前填充破坏顺序的列部分

python - 如果坐标不超过阈值,则对列进行分组

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - 如何在 MySQL 中将行数据转置为列