IIUC您可以groupby
對象使用first
:
In [95]:
df.groupby(grouper).first()
Out[95]:
test_1
2014-03-04 1.0
2014-03-05 1.0
應該工作,產生上述使用相同的數據作爲您的鏈接的問題
編輯
我覺得上面的其實是正確的,因爲它不同於呼籲head(1)
例如:
In [3]:
df.groupby(grouper).head(1)
Out[3]:
test_1 test_output
2014-03-04 09:00:00 NaN NaN
2014-03-05 09:00:00 1 1
但你也可以使用lambda
與apply
撥打first_valid_index
:
In [6]:
df.groupby(grouper)['test_1'].apply(lambda x: x.first_valid_index())
Out[6]:
2014-03-04 2014-03-04 14:00:00
2014-03-05 2014-03-05 09:00:00
Name: test_1, dtype: datetime64[ns]
編輯
要將它添加回來作爲一個列有點棘手,這是因爲你試圖將orig索引與新的每日分組groupby
對象,所以它不會對齊,這就是爲什麼你NaT
。你可以做的就是在索引上撥打to_series
,我們想要這個的原因是我們可以調用map
,並且只訪問date
屬性。 map
將進行查找,因此將匹配上的日期在groupby
結果,並返回所期望的第一個有效日期:
In [136]:
df['first'] = df.index.to_series().dt.date.map(df.groupby(grouper)['test_1'].apply(lambda x: x.first_valid_index()))
df
Out[136]:
test_1 test_output first
2014-03-04 09:00:00 NaN NaN 2014-03-04 14:00:00
2014-03-04 10:00:00 NaN NaN 2014-03-04 14:00:00
2014-03-04 11:00:00 NaN NaN 2014-03-04 14:00:00
2014-03-04 12:00:00 NaN NaN 2014-03-04 14:00:00
2014-03-04 13:00:00 NaN NaN 2014-03-04 14:00:00
2014-03-04 14:00:00 1.0 1.0 2014-03-04 14:00:00
2014-03-04 15:00:00 1.0 1.0 2014-03-04 14:00:00
2014-03-04 16:00:00 1.0 1.0 2014-03-04 14:00:00
2014-03-05 09:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 10:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 11:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 12:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 13:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 14:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 15:00:00 1.0 1.0 2014-03-05 09:00:00
2014-03-05 16:00:00 1.0 1.0 2014-03-05 09:00:00
與'groupby'你可以做'df.groupby(斑)。首先() ' – EdChum