Получить количество совпадающих и не совпадающих данных столбцов в кадре данных - PullRequest
1 голос
/ 17 октября 2019

У меня есть два кадра данных, которые похожи, это входные данные CSV.

Document_ID OFFSET  PredictedFeature
    0         0            2000
    0         8            2000
    0         16           2200
    0         23           2200
    0         30           2200
    1          0            2100
    1          5            2100
    1          7            2100

Теперь у меня есть и выходные данные

 Document_ID    OFFSET   PredictedFeature
        0         0            2000
        0         8            2100
        0         16           2100
        0         23           2100
        0         30           2200
        1          0           2000
        1          5           2000
        1          7           2100

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

Итак, я сделал,

df1_inputPredictedFeature_column['new'] = df1_inputPredictedFeature_column['PredictedFeature'] == df1_predictedFeature_column['PredictedFeature']

Это добавляет один столбец, который сообщит погоду, соответствует ли он столбцу предсказанной характеристики или нет.

Теперь я пытаюсь,

в общей сложности 2 функции, где 2000 находится в предсказанной функции ввода CSV. Но в выводе csv только первое место совпадает, а не во втором.

ТАК Я пытаюсь получить эти данные как,

predictedFeatureClass  inputCsvOccured   outputcsvmatched  

 2000                        2                1

2200                         3                 1

ТАК, как я получу этоданные ? любая помощь будет отличной.

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы можете сделать это с помощью группового, как показано ниже

df1_inputPredictedFeature_column = pd.DataFrame([['0', '0', '2000'], ['0', '8', '2000'], ['0', '16', '2200'], ['0', '23', '2200'], ['0', '30', '2200'], ['1', '0', '2100'], ['1', '5', '2100'], ['1', '7', '2100']], columns=('Document_ID', 'OFFSET', 'PredictedFeature'))
df1_predictedFeature_column = pd.DataFrame([['0', '0', '2000'], ['0', '8', '2100'], ['0', '16', '2100'], ['0', '23', '2100'], ['0', '30', '2200'], ['1', '0', '2000'], ['1', '5', '2000'], ['1', '7', '2100']], columns=('Document_ID', 'OFFSET', 'PredictedFeature'))

df1_inputPredictedFeature_column['new'] = (df1_inputPredictedFeature_column['PredictedFeature'] == df1_predictedFeature_column['PredictedFeature']).astype(np.int)

result = df1_inputPredictedFeature_column.groupby("PredictedFeature").agg({"PredictedFeature":"count", "new":np.sum})

result.columns = ["inputCsvOccured", "outputcsvmatched"]
result.index.name = "predictedFeatureClass"

result.reset_index(inplace=True)
print(result)

Результат

predictedFeatureClass  inputCsvOccured  outputcsvmatched
0                  2000                2                 1
1                  2100                3                 1
2                  2200                3                 1
0 голосов
/ 17 октября 2019

Одна идея - преобразовать столбец new в целые числа по Series.view, а затем объединить столбец new с size и sum по списку кортежей для указания новых имен столбцов:

df1['new'] = (df1['PredictedFeature'] == df2['PredictedFeature']).view('i1')

df = (df1.groupby("PredictedFeature")['new']
         .agg([('inputCsvOccured','size'), ('outputcsvmatched','sum')])
         .reset_index())
print (df)
   PredictedFeature  inputCsvOccured  outputcsvmatched
0              2000                2                 1
1              2100                3                 1
2              2200                3                 1

Pandas 0.25+ решение:

df1['new'] = (df1['PredictedFeature'] == df2['PredictedFeature']).view('i1')

df = (df1.groupby("PredictedFeature")
         .agg(inputCsvOccured=pd.NamedAgg(column='new', aggfunc='size'),
              outputcsvmatched=pd.NamedAgg(column='new', aggfunc='sum'))
         .reset_index())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...