2017-12-18 27 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() 

リネームの例で、私の2番目のクエリで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

をあなたは1でそれを得ました。ありがとう。 私は長い間これを見てきたので、私は戻って私のエラーを理解しようともしなかったが、明日再び見るだろうもう一度おねがいします。 –