這是我能問出我要道歉的問題的最清楚的方式。我有這樣的月度資料,只有每月的第一天有資料點
city time value
London 2000-01-01 5
London 2000-01-02 nan
London 2000-01-03 nan
..
London 2000-01-31 nan
London 2000-02-01 nan
London 2000-02-02 nan
London 2000-02-01 nan
...
London 2000-02-31 nan
London 2000-03-01 3
London 2000-01-01 nan
..
我基本上想以熊貓形式執行以下陳述句:
如果 value = nan 對于 day = 1 的時間戳,則用 -1 替換該月的第一個值。我正在使用條件作為掩碼來處理 python 子分段符號。
所以從上面我希望我的資料看起來像
city time value
London 2000-01-01 5
London 2000-01-02 nan
London 2000-01-03 nan
..
London 2000-01-31 nan
London 2000-02-01 -1
London 2000-02-02 nan
London 2000-02-01 nan
...
London 2000-02-31 nan
London 2000-03-01 3
London 2000-01-01 nan
..
但它顯然還在繼續,并且有數千行。
編輯-
以下是我開始嘗試的內容:所以我在網上看到我可以創建一個條件,然后使用 df.loc(that condition) 對資料進行分段,例如
mask = (df.time.dt.day==1)
所以我相信這個小節是 day=1 的時間,但我不知道如何進行。
uj5u.com熱心網友回復:
numpy.where與pd.to_datetime,Series.eq和一起使用Series.isna:
In [503]: import numpy as np
# Convert 'time' column into pandas datetime
In [499]: df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d')
In [504]: df['value'] = np.where(df['time'].dt.day.eq(1) & df['value'].isna(), -1, df['value'])
In [505]: df
Out[505]:
city time value
0 London 2000-01-01 5.0
1 London 2000-01-02 NaN
2 London 2000-01-03 NaN
3 London 2000-01-31 NaN
4 London 2000-02-01 -1.0
5 London 2000-02-02 NaN
6 London 2000-02-01 -1.0
7 London 2000-03-01 3.0
8 London 2000-01-01 -1.0
或使用df.loc:
In [499]: df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%d')
In [510]: df.loc[df['time'].dt.day.eq(1) & df['value'].isna(), 'value'] = -1
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409562.html
標籤:
上一篇:將具有UTC時區偏移量的日期轉換為相應的本地時區格式
下一篇:列出理解以查找資料框是否是周末
