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)