从广义上讲,我有来自Kaggle的智能仪表数据集,我试图按房子计算第一个和最后一个测量值,然后尝试聚合以查看有多少房屋开始(或结束)报告给定的一天。我完全不同于下面我所追求的方法。
在SQL中,在浏览数据时,我经常使用以下内容:
protocol HomePostCellDelegate {
func didLike(for cell: HomePostCell)
}
class HomePostCell: UICollectionViewCell {
var delegate: HomePostCellDelegate?
lazy var likeButton: UIButton = {
let button = UIButton(type: .system)
button.setImage(#imageLiteral(resourceName: "heart_unselected").withRenderingMode(.alwaysOriginal), for: .normal)
button.addTarget(self, action: #selector(handleLike), for: .touchUpInside)
return button
}()
@objc func handleLike() {
delegate?.didLike(for: self)
}
lazy var likesLabel: UILabel = {
let label = UILabel()
label.font = UIFont(name: "AvenirNext-Regular", size: 20)
label.textColor = UIColor.black
label.isHidden = true
let userInfo = ["likesLabelInfo": label]
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refresh"), object: nil, userInfo: userInfo)
return label
}()
override init(frame: CGRect) {
super.init(frame: frame)
}
static let homePostCellNotificationName = NSNotification.Name(rawValue: "homePostCellRaw")
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我试图在Pandas中复制这个逻辑并失败。我可以得到像:
这样的初始聚合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
但是我没有得到外部查询。具体来说,我不知道聚合列的调用方式。如果我执行describe(),它会在上面的示例中显示为Date_Time。我尝试重命名列:
house_max = house_info.groupby('House_Id').agg({'Date_Time' :['max']})
我找到了一个关于重命名结果的StackOverflow discussion并尝试应用它:
house_max.columns = ['House_Id','Max_Date_Time']
我仍然发现describe()返回Date_Time作为列名。
house_max.columns = ["_".join(x) for x in house_max.columns.ravel()]
在重命名示例中,我的第二个查询无法找到Date_Time或Max_Date_Time。在后一种情况下,拉威尔代码在运行时似乎找不到House_Id。
答案 0 :(得分: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()