如何从元组计数器创建数据帧

2024-09-29 19:01:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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,它基本上生成以下输出:

^{pr2}$

Tags: in元素pandas列表排序countcounterscipy
1条回答
网友
1楼 · 发布于 2024-09-29 19:01:56

稍微不同一点的方法呢?在

首先,让我们从元组的sortedlist创建一个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

现在我们可以使用熊猫技术来计算配对数:

^{pr2}$

在多索引数据框中访问数据:

In [277]: res.loc[(1,2)]
Out[277]: 2

In [278]: res.loc[(2,4)]
Out[278]: 2

我们还可以取消叠加得到的DF,这将为我们提供:

^{4}$

as proposed by @Dark

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

相关问题 更多 >

    热门问题