簡體   English   中英

如何將 Pandas 中的 GroupBy 對象轉換為多索引數據框

[英]How to convert GroupBy object in pandas to multiindexed dataframe

我有一個看起來像的原始數據框

        codcet  placa_encoded   date   time_seconds velocidade
5031 490191222  431.0      2021-03-11   70079.0      51
5032 490221211  431.0      2021-03-11   72219.0      55
7991 490361213  562.0      2021-03-11   28559.0      24
7992 490361232  562.0      2021-03-11   29102.0      29              
7993 490361221  562.0      2021-03-11   30183.0      33                 
...

最左邊的數字是來自原始數據集的索引。 我的目標是將其轉換為由placa_encodedn索引的數據幀,每個組內的計數器看起來像

placa_encoded  n    time_seconds  velocidade            codcet    
431.0          0      70079.0           51              490191222   
431.0          1      72219.0           55              490221211   
562.0          0      28559.0           24              490361213   
562.0          1      29102.0           29              490361232
562.0          2      30183.0           33              490361221   

也就是說,我的目標是groupby('placa_encoded')然后添加另一列n來計算每個組中的位置。 該行應由placa_encodedn索引。 我想我可以使用cumcount()來做到這一點,但我不清楚如何將它添加為列,因為groupby不會產生我可以分配的數據框。 我查看了這個問題,但似乎他們使用.count()將其轉換為數據框,我想保留數據而不是獲取任何計數。 我也嘗試使用pd.DataFrame(gbplaca)pd.DataFrame(gbplaca.groups)無濟於事。

太感謝了!

我想這就是你想要的

df['n'] = df.sort_values(['time_seconds'], ascending=True).groupby(['placa_encoded']).cumcount()
df = df.set_index(['placa_encoded', 'n'])
df

這是一個帶有“placa_encoded”和“n”的多索引

您所要做的就是使用df.groupby('placa_encoded').cumcount()的結果設置df中的列(名為'n' ):

    df.loc[:, 'n'] = df.groupby('placa_encoded').cumcount()
    print(df)
           codcet  placa_encoded        date  time_seconds  velocidade  n
     0  490191222          431.0  2021-03-11       70079.0          51  0
     1  490221211          431.0  2021-03-11       72219.0          55  1
     2  490361213          562.0  2021-03-11       28559.0          24  0
     3  490361232          562.0  2021-03-11       29102.0          29  1
     4  490361221          562.0  2021-03-11       30183.0          33  2

然后,您可以根據需要將df的多索引設置為['placa_encoded', 'n']

    df = df.set_index(['placa_encoded', 'index'])
    print(df)
                         codcet        date  time_seconds  velocidade
     placa_encoded n                                                 
     431.0         0  490191222  2021-03-11       70079.0          51
                   1  490221211  2021-03-11       72219.0          55
     562.0         0  490361213  2021-03-11       28559.0          24
                   1  490361232  2021-03-11       29102.0          29
                   2  490361221  2021-03-11       30183.0          33

暫無
暫無

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

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