我有一些代码,寻找匹配项,已回答的问题here给出了该问题的一些历史记录。我正在查看数据集,对数据进行排序和查找。
我的例子:
print(df_pivot)
value H1 H10 H11 H15 H2 H21 H4 H5 H6 H7 H9
Date
2018-01-01 4.5 3.0 NaN 4.0 2.5 5.0 2.666667 NaN 4.0 NaN 3.5
2018-02-01 NaN NaN 4.0 NaN NaN NaN NaN 2.0 NaN 5.0 NaN
print(df_pivot.corr())
value H1 H10 H11 H15 H2 H21 H4 H5 H6 H7 H9
value
H1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H10 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H11 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H21 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
H9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
我得到:
// Test Data:
ConcurrentBag<string> One = new ConcurrentBag<string>() { "0", "1", "3", "5", "7", "9" };
ConcurrentBag<string> Two = new ConcurrentBag<string>() { "0", "2", "4", "6", "8", "10" };
ConcurrentBag<string> Three = new ConcurrentBag<string>() { "0", "10", "20", "30", "40" };
// Init new Index:
BaseCollection = new ConcurrentDictionary<int, ConcurrentBag<string>>();
BaseCollection[0] = One;
BaseCollection[1] = Two;
BaseCollection[2] = Three;
// Get all Id's in this Collection:
var IDs = BaseCollection.SelectMany(u => u.Value);
// Sort and extract Matches:
var Matches = IDs.GroupBy(id => id)
.Where(id => id.Count() > 1)
.Select(id => id.Key).Distinct()
.ToDictionary(id => id.ToString(), id => id.Count());
我应该得到:
0: 1
10: 2
我做错了什么?
答案 0 :(得分:5)
这里的id
是string
:
.ToDictionary(id => id.ToString(), id => id.Count());
因此,它不像您认为的那样代表集合。呼叫计数返回字符数,而不是出现某项的次数。
您应该将LINQ查询更改为使用实际组而不是密钥:
IDs.GroupBy(id => id)
.Where(id => id.Count() > 1)
.ToDictionary(g => g.Key, g => g.Count());