和:
df = pd.DataFrame({'datetime': pd.date_range('2022-05-01 10:00:00', periods=10, freq='10H'), 'value': [np.nan, np.nan, np.nan, -0.61, np.nan, 0.55, 0.63, np.nan, 0.15, np.nan]})
df
datetime value
0 2022-05-01 10:00:00 NaN
1 2022-05-01 20:00:00 NaN
2 2022-05-02 06:00:00 NaN
3 2022-05-02 16:00:00 -0.61
4 2022-05-03 02:00:00 NaN
5 2022-05-03 12:00:00 0.55
6 2022-05-03 22:00:00 0.63
7 2022-05-04 08:00:00 NaN
8 2022-05-04 18:00:00 0.15
9 2022-05-05 04:00:00 NaN
如何獲得第一次出現的有效valuegroupbydate及其對應的datetime:
date datetime value
2022-05-02 2022-05-02 16:00:00 -0.61
2022-05-03 2022-05-03 12:00:00 0.55
2022-05-04 2022-05-04 18:00:00 0.15
我用過:df.groupby([df['datetime'].dt.date]).first()但它給了我以下資料框,其中datetime是那天第一次出現,而不是我需要的對應 datetime值:
datetime value
datetime
2022-05-01 2022-05-01 10:00:00 NaN
2022-05-02 2022-05-02 06:00:00 -0.61
2022-05-03 2022-05-03 02:00:00 0.55
2022-05-04 2022-05-04 08:00:00 0.15
2022-05-05 2022-05-05 04:00:00 NaN
uj5u.com熱心網友回復:
另一種方式,dropna,按從 datetime 中提取的日期分組
df[df['value'].notna()].groupby(df['datetime'].dt.date).first()
datetime value
datetime
2022-05-02 2022-05-02 16:00:00 -0.61
2022-05-03 2022-05-03 12:00:00 0.55
2022-05-04 2022-05-04 18:00:00 0.15
uj5u.com熱心網友回復:
使用DataFrame.dropna:
df1 = df.dropna(subset=['value']).groupby(df['datetime'].dt.date).first()
print (df1)
datetime value
datetime
2022-05-02 2022-05-02 16:00:00 -0.61
2022-05-03 2022-05-03 12:00:00 0.55
2022-05-04 2022-05-04 18:00:00 0.15
如果還需要缺失值:
d = df['datetime'].dt.date
df = df.groupby(d).bfill().set_index(d).loc[lambda x: ~x.index.duplicated()]
print (df)
datetime value
datetime
2022-05-01 2022-05-01 10:00:00 NaN
2022-05-02 2022-05-02 06:00:00 -0.61
2022-05-03 2022-05-03 02:00:00 0.55
2022-05-04 2022-05-04 08:00:00 0.15
2022-05-05 2022-05-05 04:00:00 NaN
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472593.html
上一篇:SQL:獲取具有特定時間戳的昨天
