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

Python 如何从元组计数器创建数据帧,python,python-2.7,pandas,Python,Python 2.7,Pandas,我在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

我在
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})
我正在尝试创建一个基本上产生以下输出的
数据帧

   1  2  3  4
1  0  2  2  2
2  2  0  2  2
3  2  2  0  2
4  2  2  2  0

那稍微不同的方法呢

首先,让我们从元组的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
现在,我们可以使用熊猫技术计算配对数:

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
或:


那稍微不同的方法呢

首先,让我们从元组的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
现在,我们可以使用熊猫技术计算配对数:

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
或:


您是否需要这样的结果/所需数据集?你想达到什么目的?@MaxU将数据放在
数据框中对于它的操作来说非常方便。例如,如果我需要知道一个给定的
t
与其他人配对了多少次,我可以只
df[t]
。将其放在
计数器中
不会提供索引。这只是一个例子,可能还有很多其他例子。您是否需要以这种方式创建结果/所需的数据集?你想达到什么目的?@MaxU将数据放在
数据框中对于它的操作来说非常方便。例如,如果我需要知道一个给定的
t
与其他人配对了多少次,我可以只
df[t]
。将其放在
计数器中
不会提供索引。这只是一个例子,可能还有很多其他的例子。正如我提到的,我对熊猫很有兴趣。你能简单地解释一下你的答案吗?既然已经有了一个计数器变量,我们也可以做
pd.Series(count).unstack(fill\u value=0)
正如我提到的,我对熊猫有点生疏。你能简单地解释一下你的答案吗?既然已经有了一个计数器变量,我们也可以做
pd.Series(count).unstack(fill\u value=0)