Из фрейма данных после использования groupby хотите определить частоту успеха / неудачи.С моими ограниченными знаниями в Python и пандах, хотя я сделал это, но выглядит неэффективно и неуклюже.Должен быть более простой и эффективный способ.Любая помощь приветствуется.
BldgID BldHt Device Date Time Result
1213 35 758 20181120 105550 OK
1213 35 758 20181120 105540 NG
1112 40 780 20181120 003102 OK
1117 26 790 20181120 002557 OK
1111 65 780 20181120 002102 NG
1214 80 758 20181120 001600 OK
2902 34 780 20181119 005410 OK
1232 90 780 20181119 001410 OK
1222 75 760 20181119 010552 OK
1214 80 758 20181119 010052 OK
1214 80 758 20181119 005553 NG
1246 16 790 20181119 004556 OK
1128 15 758 20181119 004552 OK
1128 15 758 20181119 004552 OK
1211 30 790 20181119 003557 NG
1211 30 790 20181119 003558 OK
Вот кадр данных (csv).Сначала я хочу сгруппировать [BldgID, BldHt, Device] и найти их процент от результата, то есть OK / OK + NG.Что я сделал, заменил «ОК» на «1» и «NG» на «0».Суммируйте все «ОК».Чтобы найти общее число (OK + NG), я использовал фрейм данных перед изменением их значения (1 и 0) и вычислил общее число.В противном случае он не учитывал NG, а затем делил их на процент «ОК».
df = pd.read_csv("data.csv")
df1 = df.groupby(['BldgID','Device'])['Result'].agg('sum').reset_index()
df1 = df.replace({'OK':1, 'NG': 0})
df1 = df1.groupby(['BldgID','Device'])['Result'].agg('sum').reset_index()
df1['NumOKs'] = df1['Result']
# used the original df i.e. change OK=1, NG=0, to count the total num of
# OK+NG
df2 = df.groupby(['BldgID','Device'])
['Result'].agg('count').reset_index()
df2['sum'] = mel_df2['Result']
df2.drop(['Result'], axis=1, inplace=True)
df3 = pd.concat([df1['NumOKs'], df2['sum']], axis=1, keys=
['NumOKs','sum'])
df3.head(10)
# sum represents OK+NG
NumOKs sum
0 2 2
1 6 6
2 2 2
3 2 2
4 2 2
5 3 4
6 3 3
7 3 3
8 2 3
9 3 3
Я получил то, что хотел, но это выглядит очень некрасиво и неэффективно.Но с моими ограниченными знаниями я должен найти что-то быстрое, и это работает.Хотите добиться этого лучше и проще.примечание: результат может быть не совсем точно воспроизведен, так как я вырезал и вставил небольшую часть кода и объяснял, чего я хочу, и как (плохо) я это сделал.