2017-12-18 92 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

你一语中的。谢谢。 我一直在盯着这个很长一段时间,所以我甚至没有尝试回去并理解我的错误,但我会再次看看再次感谢。 –