我有一个如下所示的数据框(称为错误):
Code ID Error1 Error 2
Time
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')
第二个问题是我不知道我会在错误中得到多少不同的代码(错误1和错误2)所以我不确定如何编写
error_count.columns = ['Time', 'machineID', 'error1', 'error2',
'error3', 'error4', 'error5']
反映这一点。
提前谢谢
答案 0 :(得分:1)
好吧,如果您发现,Time
已经已设置为索引。您可以通过查询df.index.name
来验证这一点,它应该返回Time
。
对于第二个查询,您可以将Time
和ID
设置为索引,然后调用pd.get_dummies
。请注意,此处的假设是Time
已经是数据中的第一个索引列。我们将添加另一个set_index(..., append=True)
。
# df = df.replace('None', np.nan) # optional step, if `None` is a string
df
ID Error1 Error2
Time
2010-01-01 00:00:31.690 105278.0 NaN 5
2010-01-01 00:00:32.000 105278.0 1 NaN
2010-01-01 00:00:32.140 105278.0 3 NaN
2010-01-01 00:00:32.350 105278.0 NaN 7
2010-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 Error7
0 2010-01-01 00:00:31.690 105278.0 0 0 0 1 0
1 2010-01-01 00:00:32.000 105278.0 1 0 0 0 0
2 2010-01-01 00:00:32.140 105278.0 0 1 0 0 0
3 2010-01-01 00:00:32.350 105278.0 0 0 0 0 1
4 2010-01-01 00:00:32.460 105278.0 0 0 1 0 0