我有两个数据框,就像, 这是输入的 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']
这会添加一列,该列将告诉天气它是否与预测的特征列匹配。
现在我正在尝试的是,
输入 csv 的预测特征中共有 2 个特征,其中 2000。但在输出 csv 中,只有第一个位置是匹配的,而不是第二个位置。
所以我正在尝试获取这些数据,例如,
predictedFeatureClass inputCsvOccured outputcsvmatched
2000 2 1
2200 3 1
那么,我如何获取这些数据?任何帮助都会很棒。
最佳答案
一个想法是通过 Series.view
将 new
列转换为整数然后通过元组列表将列 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())
关于python - 获取数据框中匹配和不匹配列数据的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58426376/