Pandas 分类列来分解表格

问题描述 投票:0回答:1

我正在 SQL 服务器上处理一个巨大的非规范化表。以此作为数据示例:

import pandas as pd
import numpy as np
data = pd.DataFrame({
    'status' :  ['pending', 'pending','pending', 'canceled','canceled','canceled', 'confirmed', 'confirmed','confirmed'],
    'clientId' : ['A', 'B', 'C', 'A', 'D', 'C', 'A', 'B','C'],
    'partner' :  ['A', np.nan,'C', 'A',np.nan,'C', 'A', np.nan,'C'],
    'product' : ['afiliates', 'pre-paid', 'giftcard','afiliates', 'pre-paid', 'giftcard','afiliates', 'pre-paid', 'giftcard'],
    'brand' : ['brand_1', 'brand_2', 'brand_3','brand_1', 'brand_2', 'brand_3','brand_1', 'brand_3', 'brand_3'],
    'gmv' : [100,100,100,100,100,100,100,100,100]})

data = data.astype({'partner':'category','status':'category','product':'category', 'brand':'category'})

如您所见,其中许多列都是可以因式分解的类别/字符串(用一个小 int 标识替换为另一个 x.1 连接)。

我的问题是是否有一种简单的方法可以从每个类别列中提取另一个“数据帧”并工厂化主表,因此通过单个查询传输的字节可能会更快!有没有简单的库?

我希望得到输出 a :

    data = pd.DataFrame({
        'status' :  ['1', '1','1', '2','2','2', '3', '3','3'],
        'clientId' : ['1', '2', '3', '1', '4', '3', '1', '2','3'],
        'partner' :  ['A', np.nan,'C', 'A',np.nan,'C', 'A', np.nan,'C'],
        'product' : ['afiliates', 'pre-paid', 'giftcard','afiliates', 'pre-paid', 'giftcard','afiliates', 'pre-paid', 'giftcard'],
        'brand' : ['brand_1', 'brand_2', 'brand_3','brand_1', 'brand_2', 'brand_3','brand_1', 'brand_3', 'brand_3'],
        'gmv' : [100,100,100,100,100,100,100,100,100]})
    
status_df = {1 : 'pending', 2:'canceled', 3:'confirmed'} 
clientid = {1 : 'A', 2:'B', 3:'C', 4:'D'}

等等!

奖金问题!我的桌子很大,所以我可能需要使用 DASK 应用一些东西。

python pandas dask
1个回答
0
投票

您可以使用

factorize
来执行此操作。例如:

codes, uniques = pd.factorize(data['status'])
data['status'] = codes
status_df = pd.DataFrame(uniques)

输出(数据):

   status clientId partner    product    brand  gmv
0       0        A       A  afiliates  brand_1  100
1       0        B     NaN   pre-paid  brand_2  100
2       0        C       C   giftcard  brand_3  100
3       1        A       A  afiliates  brand_1  100
4       1        D     NaN   pre-paid  brand_2  100
5       1        C       C   giftcard  brand_3  100
6       2        A       A  afiliates  brand_1  100
7       2        B     NaN   pre-paid  brand_3  100
8       2        C       C   giftcard  brand_3  100

输出(status_df):

           0
0    pending
1   canceled
2  confirmed
© www.soinside.com 2019 - 2024. All rights reserved.