"Nightbringer"、"管理员"> "龙的"、"管理员""Nightbringer"、"散兵"
我有一个包含一些冠军及其相关特征的数据框架,它看起来像这样:
特征th>如果没有,您需要计算具有匹配特征的其他行的数量。
使用str.get_dummies
和numpy的组合:
NB。这里假设性状是字符串,如果列表只是从列表中获取假人,而不是
import numpy as np
a = df.Traits.str.get_dummies(sep=',').values
b = a.dot(a.T)
np.fill_diagonal(b, 0)
pd.DataFrame({'Source': df['Index'],
'Target': b.sum(1)})
输出:
Source Target
0 0 2
1 1 1
2 2 0
3 3 1
你可以用一个trait的所有出现的索引创建一个字典:
my_dict = {}
for i, j in enumerate(df['Traits']):
for trait in j:
if trait in my_dict:
my_dict[trait].append(i)
else:
my_dict[trait] = [i]
print(my_dict)
输出:
{'Nightbringer': [0, 3], 'Ranger': [0, 1], 'Draconic': [1, 2], 'Renewer': [2], 'Caretaker': [2], 'Skirmisher': [3]}
这是一个更好的方法,因为你不会得到不必要的重复,例如0 points to 3
和3 points to 0