在 numpy where 的条件下使用值方法
use method of value for the condition of numpy where
假设您有这个数据框:
df = pd.DataFrame( data = [ '2014-04-07 10:55:35.087000+00:00',
'2014-04-07 13:59:37.251500+00:00',
'2014-04-02 13:23:59.629000+00:00',
'2014-04-07 12:17:48.182000+00:00',
'2014-04-06 17:00:23.912000+00:00'],
columns = ['timestamp'],
dtype = np.datetime64
)
并且您想创建一个新列,如果时间戳是工作日,则值为 1,否则为 0。然后我会 运行 像这样:
df['weekday'] = df['timestamp'].apply(lambda x: 1 if x.weekday() < 5 else 0 )
到目前为止一切顺利。然而,在我的例子中 我有大约 1000 万行这样的时间戳值,它只需要永远到 运行。因此,我四处寻找矢量化选项,并找到了 numpy.where()
。但是,当然,这不起作用:np.where(df['timestamp'].weekday() < 5, 1, 0)
那么,有没有办法在使用 numpy.where 时访问时间戳的 .weekday() 方法,或者有任何其他方法可以在有 1000 万行时生成工作日列?谢谢
使用Series.dt.dayofweek
/ Series.dt.weekday
with Series.lt
and Series.astype
:
df['weekday'] = df['timestamp'].dt.dayofweek.lt(5).astype(int)
print(df)
timestamp weekday
0 2014-04-07 10:55:35.087000 1
1 2014-04-07 13:59:37.251500 1
2 2014-04-02 13:23:59.629000 1
3 2014-04-07 12:17:48.182000 1
4 2014-04-06 17:00:23.912000 0
我推荐你看:
我们也可以使用 np.where
:
df['weekday'] = np.where(df['timestamp'].dt.dayofweek.lt(5), 1, 0)
假设您有这个数据框:
df = pd.DataFrame( data = [ '2014-04-07 10:55:35.087000+00:00',
'2014-04-07 13:59:37.251500+00:00',
'2014-04-02 13:23:59.629000+00:00',
'2014-04-07 12:17:48.182000+00:00',
'2014-04-06 17:00:23.912000+00:00'],
columns = ['timestamp'],
dtype = np.datetime64
)
并且您想创建一个新列,如果时间戳是工作日,则值为 1,否则为 0。然后我会 运行 像这样:
df['weekday'] = df['timestamp'].apply(lambda x: 1 if x.weekday() < 5 else 0 )
到目前为止一切顺利。然而,在我的例子中 我有大约 1000 万行这样的时间戳值,它只需要永远到 运行。因此,我四处寻找矢量化选项,并找到了 numpy.where()
。但是,当然,这不起作用:np.where(df['timestamp'].weekday() < 5, 1, 0)
那么,有没有办法在使用 numpy.where 时访问时间戳的 .weekday() 方法,或者有任何其他方法可以在有 1000 万行时生成工作日列?谢谢
使用Series.dt.dayofweek
/ Series.dt.weekday
with Series.lt
and Series.astype
:
df['weekday'] = df['timestamp'].dt.dayofweek.lt(5).astype(int)
print(df)
timestamp weekday
0 2014-04-07 10:55:35.087000 1
1 2014-04-07 13:59:37.251500 1
2 2014-04-02 13:23:59.629000 1
3 2014-04-07 12:17:48.182000 1
4 2014-04-06 17:00:23.912000 0
我推荐你看:
我们也可以使用 np.where
:
df['weekday'] = np.where(df['timestamp'].dt.dayofweek.lt(5), 1, 0)