2016-09-04 107 views
0

我有一個DataFrame有9列,這是編碼值爲一週中的一天(1-7),一年中的一週(1-52),一年中的月份(1-12 ),時間倉(每3小時),薪金日(0,1)和假日(0,1)和金額(實數)。時間被放置在一個時間倉中,例如, 15:00放置在第6個時間倉中,7:34放置在第3個時間倉中。DataFrame Groupby同時保持原DataFrame

Day Week Month Time Salary Holiday Amount 
1 5  2  1  0  0  700.0 
1 5  2  1  0  0  800.0 
3 18  5  7  1  0  90.0 

基本上,我需要按前6列對數據進行分組,並創建一個新的列,這是Amount的總和值。但是,由於我需要維護原始數據幀,因此這個數量將會重複。因此,它只能對在該組中具有相同的日,周,月,時間,薪金和假日(即總和)的購買進行求和。

Day Week Month Time Salary Holiday Amount Sum 
1 5  2  1  0  0  700.0 1500.0 
1 5  2  1  0  0  800.0 1500.0 
3 18  5  7  1  0  90.0 90.0 

我按日,周,月,時間,薪金,節假日和總金額分組了數據框。

temp= features.groupby(by=["Day", "Week", "Month", "Time", "Salary", "Holiday"])["Amount"].sum() 

回答

1

可以使用transform返回原來的數據幀的相同大小的列,從the docs

變換方法返回被索引相同的(相同 大小)的對象作爲被分組的人。因此,傳遞的變換函數 應該返回與組塊大小相同的結果。

df['Sum'] = df.groupby(["Day", "Week", "Month", "Time", "Salary", "Holiday"]).transform('sum') 

df  
# Day Week Month Time Salary Holiday Amount Sum 
#0 1 5  2 1  0  0 700 1500 
#1 1 5  2 1  0  0 800 1500 
#2 3 18  5 7  1  0  90 90 
0

您可以重置temp上的索引,然後在您分組的所有列上使用原始特徵dataframe進行外部合併。

result = features.merge(temp.reset_index(), on=["Day", "Week", "Month", "Time", "Salary", "Holiday"])