我有一个很大的DataFrame
,有数百万行,其中一列是date
。我想添加5列到它是0/1为工作日。你知道吗
dates = pd.date_range('1700-01-01', '2017-07-02')
df = pd.DataFrame({'date':dates, 'Values':np.random.normal(size = len(dates))})
df
date value
0 1700-01-01 -1.239422
1 1700-01-02 -0.209840
2 1700-01-03 0.146293
3 1700-01-04 1.422454
4 1700-01-05 0.453222
...
我正努力实现以下目标:
df['isMonday'] = df.apply(lambda x: 1 if x['date'].weekday() == 0 else 0, axis=1)
df['isTuesday'] = df.apply(lambda x: 1 if x['date'].weekday() == 1 else 0, axis=1)
df['isWednesday'] = df.apply(lambda x: 1 if x['date'].weekday() == 2 else 0, axis=1)
df['isThursday'] = df.apply(lambda x: 1 if x['date'].weekday() == 3 else 0, axis=1)
df['isFriday'] = df.apply(lambda x: 1 if x['date'].weekday() == 4 else 0, axis=1)
df
date value isMonday isTuesday isWednesday isThursday isFriday
0 1700-01-01 -1.239422 0 0 0 0 1
1 1700-01-02 -0.209840 0 0 0 0 0
2 1700-01-03 0.146293 0 0 0 0 0
3 1700-01-04 1.422454 1 0 0 0 0
4 1700-01-05 0.453222 0 1 0 0 0
...
这很慢。实现这一目标的最有效方法是什么。你知道吗
请尝试以下操作:
应产生:
这里发生的事情是,您将获得datetime值的星期日名称,并在它们前面加上字符串“is”。完成后,将函数
pd.get_dummies
应用于结果。pd.get_dummies
为pd.get_dummies
输出的每个值生成一列,并用1
填充匹配的行,而不匹配的行则用0
填充。这将是一个新的数据帧,您可以将它join
添加到原始的数据帧中。你知道吗编辑:
版本
0.16.2
解决方案:我希望这有帮助。你知道吗
相关问题 更多 >
编程相关推荐