Python 根据双索引中的星期几创建虚拟变量
Python Create dummy variables based on day of week in double index
我有一个带有双索引(天、时间)的数据框,如果索引日,我想创建新列 'Monday'、'Tuesday'、'Wednesday' 等等于 1是在正确的日子。
我的原始数据框:
Visitor
Date Time
2017-09-11 4:45 0
5:00 1
5:15 26
....
2017-09-12 4:45 0
5:00 1
5:15 26
....
我想要的:
Visitor Monday Tuesday
Date Time
2017-09-11 4:45 0 1 0
5:00 1 1 0
5:15 26 1 0
....
2017-09-12 4:45 0 0 1
5:00 1 0 1
5:15 26 0 1
....
这是我尝试过的:
df['Monday'] = (df.index.get_level_values(0).weekday() == 0)
但是我收到一条错误消息“'Int64Index' 对象不可调用”。
提前致谢!
您需要从 :
中删除 ()
df['Monday'] = (df.index.get_level_values(0).weekday == 0).astype(int)
print (df)
Visitor Monday
Date Time
2017-09-11 4:45 0 1
5:00 1 1
5:15 26 1
2017-09-12 4:45 0 0
5:00 1 0
5:15 26 0
names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for i, x in enumerate(names):
df[x] = (df.index.get_level_values(0).weekday == i).astype(int)
print (df)
Visitor Monday Tuesday Wednesday Thursday Friday \
Date Time
2017-09-11 4:45 0 1 0 0 0 0
5:00 1 1 0 0 0 0
5:15 26 1 0 0 0 0
2017-09-12 4:45 0 0 1 0 0 0
5:00 1 0 1 0 0 0
5:15 26 0 1 0 0 0
Saturday Sunday
Date Time
2017-09-11 4:45 0 0
5:00 0 0
5:15 0 0
2017-09-12 4:45 0 0
5:00 0 0
5:15 0 0
另一种解决方案是通过原始索引改进另一个原始 answer - need DatetimeIndex.weekday_name
with get_dummies
, then set_index
并在必要时添加重新索引以添加 missig 名称:
names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
df1 = df.join(pd.get_dummies(df.index.get_level_values(0).weekday_name)
.set_index(df.index).reindex(columns=names, fill_value=0))
print (df1)
Visitor Monday Tuesday Wednesday Thursday Friday \
Date Time
2017-09-11 4:45 0 1 0 0 0 0
5:00 1 1 0 0 0 0
5:15 26 1 0 0 0 0
2017-09-12 4:45 0 0 1 0 0 0
5:00 1 0 1 0 0 0
5:15 26 0 1 0 0 0
Saturday Sunday
Date Time
2017-09-11 4:45 0 0
5:00 0 0
5:15 0 0
2017-09-12 4:45 0 0
5:00 0 0
5:15 0 0
将get_dummies
与weekday_name
结合使用
In [293]: df.join(pd.get_dummies(df.index.get_level_values(0).weekday_name)
.set_index(df.index))
Out[293]:
Visitor Monday Tuesday
Date Time
2017-09-11 4:45 0 1 0
5:00 1 1 0
5:15 26 1 0
2017-09-12 4:45 0 0 1
5:00 1 0 1
5:15 26 0 1
In [272]: pd.get_dummies(df.index.get_level_values(0).weekday_name)
Out[272]:
Monday Tuesday
0 1 0
1 1 0
2 1 0
3 0 1
4 0 1
5 0 1
详情
In [286]: df.index.get_level_values(0).weekday_name
Out[286]: Index([u'Monday', u'Monday', u'Monday', u'Tuesday', u'Tuesday', u'Tuesday'], dtype='object', name=u'Date')
我有一个带有双索引(天、时间)的数据框,如果索引日,我想创建新列 'Monday'、'Tuesday'、'Wednesday' 等等于 1是在正确的日子。
我的原始数据框:
Visitor
Date Time
2017-09-11 4:45 0
5:00 1
5:15 26
....
2017-09-12 4:45 0
5:00 1
5:15 26
....
我想要的:
Visitor Monday Tuesday
Date Time
2017-09-11 4:45 0 1 0
5:00 1 1 0
5:15 26 1 0
....
2017-09-12 4:45 0 0 1
5:00 1 0 1
5:15 26 0 1
....
这是我尝试过的:
df['Monday'] = (df.index.get_level_values(0).weekday() == 0)
但是我收到一条错误消息“'Int64Index' 对象不可调用”。
提前致谢!
您需要从 :
中删除()
df['Monday'] = (df.index.get_level_values(0).weekday == 0).astype(int)
print (df)
Visitor Monday
Date Time
2017-09-11 4:45 0 1
5:00 1 1
5:15 26 1
2017-09-12 4:45 0 0
5:00 1 0
5:15 26 0
names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for i, x in enumerate(names):
df[x] = (df.index.get_level_values(0).weekday == i).astype(int)
print (df)
Visitor Monday Tuesday Wednesday Thursday Friday \
Date Time
2017-09-11 4:45 0 1 0 0 0 0
5:00 1 1 0 0 0 0
5:15 26 1 0 0 0 0
2017-09-12 4:45 0 0 1 0 0 0
5:00 1 0 1 0 0 0
5:15 26 0 1 0 0 0
Saturday Sunday
Date Time
2017-09-11 4:45 0 0
5:00 0 0
5:15 0 0
2017-09-12 4:45 0 0
5:00 0 0
5:15 0 0
另一种解决方案是通过原始索引改进另一个原始 answer - need DatetimeIndex.weekday_name
with get_dummies
, then set_index
并在必要时添加重新索引以添加 missig 名称:
names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
df1 = df.join(pd.get_dummies(df.index.get_level_values(0).weekday_name)
.set_index(df.index).reindex(columns=names, fill_value=0))
print (df1)
Visitor Monday Tuesday Wednesday Thursday Friday \
Date Time
2017-09-11 4:45 0 1 0 0 0 0
5:00 1 1 0 0 0 0
5:15 26 1 0 0 0 0
2017-09-12 4:45 0 0 1 0 0 0
5:00 1 0 1 0 0 0
5:15 26 0 1 0 0 0
Saturday Sunday
Date Time
2017-09-11 4:45 0 0
5:00 0 0
5:15 0 0
2017-09-12 4:45 0 0
5:00 0 0
5:15 0 0
将get_dummies
与weekday_name
In [293]: df.join(pd.get_dummies(df.index.get_level_values(0).weekday_name)
.set_index(df.index))
Out[293]:
Visitor Monday Tuesday
Date Time
2017-09-11 4:45 0 1 0
5:00 1 1 0
5:15 26 1 0
2017-09-12 4:45 0 0 1
5:00 1 0 1
5:15 26 0 1
In [272]: pd.get_dummies(df.index.get_level_values(0).weekday_name)
Out[272]:
Monday Tuesday
0 1 0
1 1 0
2 1 0
3 0 1
4 0 1
5 0 1
详情
In [286]: df.index.get_level_values(0).weekday_name
Out[286]: Index([u'Monday', u'Monday', u'Monday', u'Tuesday', u'Tuesday', u'Tuesday'], dtype='object', name=u'Date')