gpt4 book ai didi

python - 计算唯一对并将计数存储在矩阵中

转载 作者:行者123 更新时间:2023-11-28 22:21:21 25 4
gpt4 key购买 nike

我的问题类似于stackoverflow.com/q/7549410

我有这样的配对数据:

ID   ATTR
3 10
1 20
1 20
4 30

我想计算独特的对并将这些频率计数存储在这样的矩阵中:

     10   20   30
1 | 0 2 0
3 | 1 0 0
4 | 0 0 1

或者,如果已知 ID 在 {1, 2, 3, 4} 中取值,而 ATTR 在 {0, 10, 20, 30} 中取值,那么我想要一个这样的矩阵:

     0   10   20   30
1 | 0 0 2 0
2 | 0 0 0 0
3 | 0 1 0 0
4 | 0 0 0 1

问题:在 Python 或 NumPy 中最快的方法是什么?

我尝试过使用 Pandas,但我得到一个空的 DataFrame:

import numpy as np
import pandas as pd
x = pd.DataFrame([[3, 10], [1, 20], [1, 20], [4, 30]])
x.pivot_table(index = 0, columns = 1, fill_value = 0, aggfunc = 'sum')

最佳答案

您似乎想要执行交叉制表,然后进行重建索引操作。对于交叉制表,猫皮有很多种方法。

首先,使用pivot_table -

v = x.pivot_table(
index=0,
columns=1,
values=1,
aggfunc='size',
fill_value=0
)

或者,pd.crosstab -

v = pd.crosstab(x[0], x[1])

或者,set_index + get_dummies + sum(level=0)

v = pd.get_dummies(x.set_index(0)[1]).sum(level=0)

或者,get_dummies + -

v = pd.get_dummies(x[0]).T.dot(pd.get_dummies(x[1]))

v

10 20 30
1 0 2 0
3 1 0 0
4 0 0 1

接下来,在v上调用reindex -

v.reindex(index=range(1, 5), columns=range(0, 40, 10), fill_value=0)

1 0 10 20 30
0
1 0 0 2 0
2 0 0 0 0
3 0 1 0 0
4 0 0 0 1

关于python - 计算唯一对并将计数存储在矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com