level
キーワードは、Grouper
に使用できます。 (TimeGrouper
は廃止予定です)。このパラメータは
ターゲットインデックスのレベルです。
例DATAFRAME:
dates = pd.date_range('2017-01', freq='10MIN', periods=1000)
strs = ['aa'] * 1000
df = pd.DataFrame(np.random.rand(1000,2), index=pd.MultiIndex.from_arrays((dates, strs)))
ソリューション:
print(df.groupby(pd.Grouper(freq='D', level=0)).count())
0 1
2017-01-01 144 144
2017-01-02 144 144
2017-01-03 144 144
2017-01-04 144 144
2017-01-05 144 144
2017-01-06 144 144
2017-01-07 136 136
更新:あなたはあなたの結果の数はあなたがドロップしたいゼロを持っているあなたのコメントで指摘しました。例えば、あなたのデータフレームが実際にいくつかの日が欠落していると言う:
df = df.drop(df.index[140:400])
print(df.groupby(pd.Grouper(freq='D', level=0)).count())
0 1
2017-01-01 140 140
2017-01-02 0 0
2017-01-03 32 32
2017-01-04 144 144
2017-01-05 144 144
2017-01-06 144 144
2017-01-07 136 136
私の知る限りでは.count
以内にゼロカウントを排除する方法はありません。代わりに、上記の結果を使ってゼロを削除することができます。
まずソリューションnp.nan
が導入されたとき、それはfloat
に変換し、int
結果ので(hereから、私の意見では
res = df.groupby(pd.Grouper(freq='D', level=0)).count()
res = res.replace(0, np.nan).dropna()
第二に、より良い解決策、だろう、あまり好ましいかもしれない:
res = res[(res.T != 0).any()]
print(res) # notice - excludes 2017-01-02
0 1
2017-01-01 140 140
2017-01-03 32 32
2017-01-04 144 144
2017-01-05 144 144
2017-01-06 144 144
2017-01-07 136 136
.any
は、pandasに移植されたNumPyからのものであり、要求された軸に対していずれかの要素がTrueの場合にTrueを返します。データフレームを想定し
が問題になっているあなたのデータフレームのサンプルを提供することができ、このグループ化操作のためのインデックスから名前を削除することができ、この
のように見えますか? –