从包含多个值的列的DataFrame创建边缘列表



我有一个包含一些冠军及其相关特征的数据框架,它看起来像这样:

特征th>"Nightbringer"、"管理员">"龙的"、"管理员""Nightbringer"、"散兵"

如果没有,您需要计算具有匹配特征的其他行的数量。

使用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 33 points to 0

相关内容

  • 没有找到相关文章

最新更新