簡體   English   中英

通過分類列擴展pandas數據框

[英]Expand pandas dataframe by categorical column

我正在嘗試通過在一個分類列中創建更多特定於值的列來擴展數據框。 我的數據框如下所示:

樣本數據

基於列cluster的值,我想創建一個新的數據框,它應該是這樣的:

var1_clus0 , var1_clus1, ... var3_clus2

我有一個巨大的數據集,因此,我嘗試在嵌套的for循環中執行此操作,該循環對於簇列的第一個值運行正常,而其他所有條件都具有NaN。

下面是我的腳本:

data_trans = pd.DataFrame()

for i in np.arange(0, len(varlist),1):
    for j in np.arange(0,6,1):
        data_trans[str(varlist[i]) + str("_clus_") + str(j)] = data[(data.segment_hc_print == j)][varlist[i]]

該代碼可以正常工作,並根據需要生成該列。 但是它僅解析分類列的第一個值,並將它們放在新數據幀的新列中。 對於所有其他分類值,它將生成NAN。 我在做什么錯,應該如何解決?

樣品輸出

給定我給出的示例數據集,以下是所需的輸出: 樣本輸出

由於您具有2D數據集,並且varX和clusX可能具有多個匹配項,因此您必須決定要對這些匹配項進行什么處理? 我假設您要添加它們。 如果是這樣,則您正在查看的是帶有標頭行和單個數據行的數據幀,還是僅一個索引為您的varX_clusX的序列。

下面的代碼可以做到這一點:

# Setup
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'var1'      : np.random.randint(0, 1000000, 1000000),
    'var2'      : np.random.randint(0, 1000000, 1000000),
    'var3'      : np.random.randint(0, 1000000, 1000000),
    'cluster'   : np.random.randint(0, 100, 1000000) 
    })

# Processing

# Setup the cluster column for string formatting.
df['cluster'] = 'clus' + df['cluster'].apply(str)

# Un-pivot the cluster column (I'm sure there's a better term)
df = df.set_index('cluster').stack().reset_index()

# Group by the unique combination of cluster / var and sum the values.
# This will generate a column named 0 - which I changed to 'values' just for readability.
df = df.groupby(['cluster','level_1']).sum().reset_index().rename(columns = {0 : 'values'})

# Create the formatted header you're looking for
df['piv'] = df['level_1'] + '_' + df['cluster']

# Final pivot to get the values to align with the the new headers
df = df.pivot(columns = 'piv', values = 'values').sum()

在我的機器上計時-大約1秒記錄一百萬條記錄。 不知道您需要多快。

如果您不想添加所有值,並且有一個任意索引,則可以簡化:

df['cluster'] = 'clus' + df['cluster'].apply(str)

df = df.set_index('cluster').stack().reset_index()

df['piv'] = df['level_1'] + '_' + df['cluster']

df = df.pivot(columns = 'piv', values = 0).fillna(0)

這將為您提供一個數據框,其長度為初始數據集的長度x變量數量和大量零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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