2015-05-14 4 views
1

я взял целый день, пытаясь осуществить эту задачу, но не , у меня есть кадр панды данных как этотпанды GroupBy с двумя ключевыми

columns=[ka,kb_1,kb_2,timeofEvent,timeInterval] 
0:'3M' '2345' '2345' '2014-10-5',3000 
1:'3M' '2958' '2152' '2015-3-22',5000 
2:'GE' '2183' '2183' '2012-12-31',515 
3:'3M' '2958' '2958' '2015-3-10',395 
4:'GE' '2183' '2285' '2015-4-19',1925 
5:'GE' '2598' '2598' '2015-3-17',1915 

Что должно быть реализовано в новый кадр данных, сгруппированные на «ка и kb_1» ниже

columns=[ka,kb,errorNum,errorRate,totalNum of records] 
'3M','2345',0,0%,1 
'3M','2958',1,50%,2 
'GE','2183',1,50%,2 
'GE','2598',0,0%,1 

(определение записи ошибки: когда kb_1 = kb_2, соответствующая запись рассматривается как аномальное запись)

Мой код выглядит так

df['isError'] = (df['kb_1'] != df['kb_2']).astype('int') 
grouped2 = df.groupby(['ka', 'kb_1']) 

df_rst = pd.DataFrame() 
df_rst['ka'] =grouped2['ka'].all() 
df_rst['kb_1'] = grouped2['kb_1'].all() 
df_rst['errorNum'] = grouped2['isError'].transform(sum) 
df_rst['totalNum of records'] = grouped2.size() 
df_rst['Soll_neq_Letzt_error_rate'] = df_rst['errorNum'].astype('float').div(df_rst['totalNum'].astype('float'), axis='index') 
df_rst.to_csv('rst.csv',index=False) 

но результат не тот, который я хотел.

Например, столбец kb_1 становится true/false, а errorNum становится Nan. Может ли кто-нибудь объяснить, почему и дать выполнимую реализацию? Спасибо

+0

Просьба указать данные образца и желаемые результаты. Высказывание результатов не то, что вы хотели, на самом деле не говорит нам, чего вы хотите. – JohnE

+0

Спасибо, я только что добавил вход и желаемый результат – sunxd

ответ

1

Я не уверен, что вы сделали, но я не думаю, что вы были так далеко.

df2 = df.groupby(['ka','kb_1'])['isError'].agg({ 'errorNum': 'sum', 
               'recordNum': 'count' }) 

df2['errorRate'] = df2['errorNum']/df2['recordNum'] 

     recordNum errorNum errorRate 
ka kb_1         
3M 2345   1   0  0.0 
    2958   2   1  0.5 
GE 2183   2   1  0.5 
    2598   1   0  0.0 
+0

wow, thanks, can not image it просто берет две строки, чтобы закончить, так как я все еще думал о присоединении к таблице. – sunxd

+0

Рад, что помогает, пожалуйста, не забудьте нажать галочку, если вы достаточно довольны ответом. – JohnE

+0

сделано, я встретил еще одну трудность в достижении этого, потому что csv я пытаюсь манипулировать слишком большими, чтобы вложить в память, см. Http://stackoverflow.com/questions/30245640/pandas-read-csv-out-of-memory – sunxd

Смежные вопросы