给定一个 ndarray 元组和一个参考数据列表,我正在寻找一种有效的方法来生成一个 ( numpy.isin
) 映射 groupby 每个元组的第一个元素的列表的 ndarray。请参见以下示例
initial_list
是一个ndarray输入np.loadtxt
:
initial_list = np.loadtxt("data.txt",dtype={'names': ("item", "value"),'formats': ['U13', 'i8']},delimiter=' ', skiprows=1)
# initial_list = [(x,2) (x,51) (x,3) (y,11) (x,5) (z,44) (y,3) (z,2)]
reference_data = [2,3,5,11,44,51,70]
预期输出:
[[1,1,1,0,0,1,0] #x
[0,1,0,1,0,0,0] #y
[1,0,0,0,1,0,0]] #z
我知道我可以通过纯 Python 迭代来实现这一点。内置 NumPy 有什么有效的方法吗?类似于熊猫数据框groupby
功能的东西。我的目标是未来的 Jaccard 指数计算。
Python迭代方法:
item_dict = {}
result = []
for item in initial_list:
if item[0] not in item_dict:
item_dict[item[0]] = [item[1]]
else:
item_dict[item[0]].append(item[1])
item_dict[item[0]] = sorted(item_dict[item[0]])
print(item_dict) #{'x': [2, 3, 5, 51], 'y': [3, 11], 'z': [2, 44]}
for item in item_dict.keys():
result.append([1 if x in item_dict[item] else 0 for x in reference_data])
[print(i) for i in result]
#result=
#[[1, 1, 1, 0, 0, 1, 0],
#[0, 1, 0, 1, 0, 0, 0],
#[1, 0, 0, 0, 1, 0, 0]]
非常感谢提前