我在pandas
和其他scipy图书馆都很绿,所以我不知道该怎么做。我有一个双元素元组的列表,我正在计算找到相同元组的次数,或者相反的对应元组,因此排序:
In [24]: tuples
Out[24]:
[(1, 2),
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 4),
(2, 1),
(3, 1),
(4, 1),
(3, 2),
(4, 2),
(4, 3)]
In [30]: count = Counter([tuple(sorted(t)) for t in tuples])
In [31]: count
Out[31]: Counter({(1, 2): 2, (1, 3): 2, (1, 4): 2, (2, 3): 2, (2, 4): 2, (3, 4): 2})
我正在尝试创建一个基本上产生此输出的DataFrame
:
1 2 3 4
1 0 2 2 2
2 2 0 2 2
3 2 2 0 2
4 2 2 2 0
答案 0 :(得分:2)
略有不同的方法呢?
首先让我们从元组的分类列表中创建一个DF:
In [272]: df = pd.DataFrame(np.sort(np.array(tuples), axis=1), columns=['c1','c2'])
In [273]: df
Out[273]:
c1 c2
0 1 2
1 1 3
2 1 4
3 2 3
4 2 4
5 3 4
6 1 2
7 1 3
8 1 4
9 2 3
10 2 4
11 3 4
现在我们可以使用Pandas技术计算对数:
In [274]: res = df.groupby(['c1','c2']).size()
In [275]: res
Out[275]:
c1 c2
1 2 2
3 2
4 2
2 3 2
4 2
3 4 2
dtype: int64
访问多索引DF中的数据:
In [277]: res.loc[(1,2)]
Out[277]: 2
In [278]: res.loc[(2,4)]
Out[278]: 2
我们也可以拆开最终的DF,这将给我们提供:
In [279]: res.unstack(fill_value=0)
Out[279]:
c2 2 3 4
c1
1 2 2 2
2 0 2 2
3 0 0 2
In [280]: pd.Series(count).unstack(fill_value=0)
Out[280]:
2 3 4
1 2 2 2
2 0 2 2
3 0 0 2