我有一个名为Errors的数据框,结构如下:
Code ID Error1 Error 2Time 2010-01-01 00:00:31.690 105278.0 None 5 2010-01-01 00:00:32.000 105278.0 1 None 2010-01-01 00:00:32.140 105278.0 3 None 2010-01-01 00:00:32.350 105278.0 None 7 2010-01-01 00:00:32.460 105278.0 None 1
我想为每个时间戳统计不同类型的错误,并将它们保存到单独的列中:
error_count = pd.get_dummies(errors.set_index('Time')).reset_index() error_count.columns = ['Time', 'machineID', 'error1', 'error2', 'error3', 'error4', 'error5'] # combine errors for a given machine in a given hour error_count = error_count.groupby(['machineID', 'datetime']).sum().reset_index()
我有两个问题,第一个是:当我运行
pd.get_dummies(errors.set_index('Time')).reset_index()
我得到了键错误(KeyError: ‘Time’)
第二个问题是,我不知道我的错误(Error1和Error 2)中会有多少不同的代码,所以我不确定如何编写
error_count.columns = ['Time', 'machineID', 'error1', 'error2', 'error3', 'error4', 'error5']
来反映这一点。
提前感谢
回答:
如果你仔细观察,Time
已经设置为索引。你可以通过查询df.index.name
来验证这一点,它应该返回Time
。
对于你的第二个问题,你可以将Time
和ID
设置为索引,然后调用pd.get_dummies
。这里的假设是Time
已经是你的数据中的第一个索引列。我们将使用set_index(..., append=True)
添加另一个索引列。
# df = df.replace('None', np.nan) # 可选步骤,如果`None`是一个字符串df ID Error1 Error2Time 2010-01-01 00:00:31.690 105278.0 NaN 52010-01-01 00:00:32.000 105278.0 1 NaN2010-01-01 00:00:32.140 105278.0 3 NaN2010-01-01 00:00:32.350 105278.0 NaN 72010-01-01 00:00:32.460 105278.0 NaN 1
pd.get_dummies( df.set_index('ID', append=True), prefix='', prefix_sep='')\ .add_prefix("Error")\ .reset_index() Time ID Error1 Error3 Error1 Error5 Error70 2010-01-01 00:00:31.690 105278.0 0 0 0 1 01 2010-01-01 00:00:32.000 105278.0 1 0 0 0 02 2010-01-01 00:00:32.140 105278.0 0 1 0 0 03 2010-01-01 00:00:32.350 105278.0 0 0 0 0 14 2010-01-01 00:00:32.460 105278.0 0 0 1 0 0