データフレームには1日にタイムスタンプが1つしか含まれていないため、日付ごとに最新のものを選択する必要があります(値、タイムスタンプ自体ではありません)。 DFは次のようになります。私は希望のタイムスタンプを取得するためのフィルタとして使用する列の値を指定し各日付の最後のタイムスタンプを選択
def find_last_h(df,column):
newindex = []
df2 = df.resample('d').last().dropna()
for x in df2[column].values:
newindex.append(df[df[column]==x].index.values[0])
return pd.DatetimeIndex(newindex)
れる:
A B C
2016-12-05 12:00:00+00:00 126.0 15.0 38.54
2016-12-05 16:00:00+00:00 131.0 20.0 42.33
2016-12-14 05:00:00+00:00 129.0 18.0 43.24
2016-12-15 03:00:00+00:00 117.0 22.0 33.70
2016-12-15 04:00:00+00:00 140.0 23.0 34.81
2016-12-16 03:00:00+00:00 120.0 21.0 32.24
2016-12-16 04:00:00+00:00 142.0 22.0 35.20
私は、私は次の関数を定義することにより、必要なものを達成するために管理しました。ここでの問題は、一意ではない値の場合には、これは望ましくないことかもしれません。
使用されているもう一つの方法は次のとおりです。
grouped = df.groupby([df.index.day,df.index.hour])
grouped.groupby(level=0).last()
して、タイムスタンプを再構築するが、それは、より冗長です。スマートな方法は何ですか?
ありがとうございました!質問は、| 〜idx.duplicated(Keep = False)が本当に必要ですか?私は右のブール値の配列を既にそれなしで得る! – marpis
このコードは一意の行をすべて取得します。おそらくあなたの実際のデータではありませんが、あなたのサンプルを使用する場合は、3.それなしで行が削除されます。 – jezrael