簡體   English   中英

在熊貓中,我如何展平一組行

[英]In pandas, how do I flatten a group of rows

我是 python 中的熊貓新手,我將不勝感激。 我一直在谷歌搜索和谷歌搜索,但似乎無法破解它。

例如,我有一個包含 6 列的 csv 文件。 我正在嘗試將行組合在一起,以便每一行的所有數據都展平為一行。

因此,如果我的數據如下所示:

event event_date event_time name height age 1 2015-05-06 14:00 J Bloggs 185 24 1 2015-05-06 14:00 P Smith 176 55 1 2015-05-06 14:00 T Kirk 193 22 2 2015-05-14 17:00 B Gates 178 72 2 2015-05-14 17:00 J Mayer 184 42

我想要的結果像這樣變平了

event  event_date   event_time    name_1     height_1   age_1   name_2     height_2   age_2    name_3    height_3   age_3                                          
1      2015-05-06   14:00         J Bloggs   185        24      P Smith    176        55       T Kirk    193        22                                         
2      2015-05-14   17:00         B Gates    178        72      J Mayer    184        42
                                                                                                                                                                           .           

因此,正如您在上面看到的,前 3 行中的第一個事件已被展平為一個,並且列已擴展以容納行數據。 第二個事件已展平,列中填充了數據。

任何幫助都會受到贊賞。

腳步:

1) 計算Groupby對象的累積計數。 添加 1 以便按照所需的DF格式化標題。

2)設置相同的分組的列與所計算的沿索引軸線cumcounts然后unstack它。 此外,根據最低級別對標題進行排序。

3) 重命名多索引列並相應地展平以獲得單個標題。


cc = df.groupby(['event','event_date','event_time']).cumcount() + 1
df = df.set_index(['event','event_date','event_time', cc]).unstack().sort_index(1, level=1)
df.columns = ['_'.join(map(str,i)) for i in df.columns]
df.reset_index()

在此處輸入圖片說明

你用長桌子做一張寬桌子。 通常在數據分析中,您想做相反的事情。 這是一種方法,它首先計算每個變量名稱、高度和年齡的出現次數,然后按照您想要的方式旋轉它們。

df['group_num'] = df.groupby(['event', 'event_date','event_time']).cumcount() + 1
df = df.sort_values('group_num')
df1 = df.set_index(['event', 'event_date','event_time', 'group_num']).stack().reset_index()
df1['var_names'] = df1['level_4'] + '_' + df1['group_num'].astype(str)
df1 = df1.drop(['group_num', 'level_4'], axis=1)
df1.set_index(['event', 'event_date', 'event_time', 'var_names']).squeeze().unstack('var_names')

var_names                   age_1 age_2 age_3 height_1 height_2 height_3  \
event event_date event_time                                                
1     2015-05-06 14:00         24    55    22      185      176      193   
2     2015-05-14 17:00         72    42  None      178      184     None   

var_names                      name_1   name_2  name_3  
event event_date event_time                             
1     2015-05-06 14:00       J Bloggs  P Smith  T Kirk  
2     2015-05-14 17:00        B Gates  J Mayer    None  

暫無
暫無

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

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