Python根据双索引中的星期几创建虚拟变量

标签 python pandas dataframe dayofweek dummy-variable

我有一个带有双索引(日期、时间)的数据框,如果索引日期在正确的日期,我想创建新列“星期一”、“星期二”、“星期三”等等于 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 - 需要 DatetimeIndex.weekday_nameget_dummies , 然后 set_index按原始索引并在必要时添加重新索引以添加任务名称:

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  

关于Python根据双索引中的星期几创建虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46219517/

相关文章:

python - 如何根据另一列滚动函数的结果计算 pandas DataFrame 列的值

python - 如何按职位过滤数据集?

python - 将 python 3.8 文件转换为 .exe

python - Twitter 流媒体 : Get trends on Twitter on the basis of countries

python - 为什么我会收到此 Python 脚本的连接拒绝异常?

python - Pandas - 将行作为列表中的元素 append 到 DataFrames,不起作用

python - Pandas 'Int64' 类型合并后转换为 'object' 类型

apache-spark - 在 Spark 中为具有 1500 列的表定义 DataFrame Schema

dataframe - 转换数据框中的数据类型

python - 如何调试导入语句更改行为