2017-12-18 91 views
0

廣泛地說,我有來自Kaggle的智能量表數據集,我試圖按房子計算第一個和最後一個量度,然後嘗試聚合以查看有多少房屋開始(或結束)報告給定的一天。我接受的方法完全不同於我在下面追求的路線。使用熊貓計算累計結果的頻率

在SQL中,探索數據時,我經常使用類似以下內容:

SELECT Max_DT, COUNT(House_ID) AS HouseCount 
FROM 
(
    SELECT House_ID, MAX(Date_Time) AS Max_DT 
    FROM ElectricGrid GROUP BY HouseID 
) MeasureMax 
GROUP BY Max_DT 

我想在熊貓複製這種邏輯和失敗。我可以得到初始聚集,如:

house_max = house_info.groupby('House_Id').agg({'Date_Time' :['max']}) 

但是我沒有得到外部查詢。具體來說,我不知道聚合列被稱爲什麼。如果我做了一個describe(),它在上面的例子中顯示爲Date_Time。我試圖重新命名列:

house_max.columns = ['House_Id','Max_Date_Time'] 

我發現了一個StackOverflow discussion有關重命名聚集的結果,並試圖將其應用:

house_max.columns = ["_".join(x) for x in house_max.columns.ravel()] 

我還發現,在說明()返回DATE_TIME作爲列名。

start_end_collate = house_max.groupby('Date_Time_max')['House_Id'].size() 

在重命名示例中,我的第二個查詢無法找到Date_Time或Max_Date_Time。在後面的例子中,Ravel代碼在運行時似乎沒有找到House_Id。

回答

1

這似乎很奇怪,我想你的代碼將無法找到House_Id字段。在House_Id上執行groupby之後,它將成爲您不能作爲列引用的索引。

這應該工作:

house_max = house_info.groupby('House_Id').agg({'Date_Time' :['max']}) 
house_max.columns = ["_".join(x) for x in house_max.columns.ravel()] 
start_end_collate = house_max.groupby('Date_Time_max').size() 

或者你可以刪除多列:

house_max.columns = house_max.columns.droplevel(0) 
start_end_collate = house_max.groupby('max').size() 
+0

你一語中的。謝謝。 我一直在盯着這個很長一段時間,所以我甚至沒有嘗試回去並理解我的錯誤,但我會再次看看再次感謝。 –