我有:
idx Node1 Node2 Immediacy
0 a C 5
1 a B 5
2 B D 3
3 B E 3
4 B F 3
和一个数组(顶点):
array(['a', 'B', 'C', 'E', 'G', 'H', 'J', 'D', 'F', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'I', 'K'], dtype=object)
我想添加一个新列/根据数组的索引位置替换数据框中的所有字母:
idx Node1 Node2 Immediacy
0 0 2 5
1 0 1 5
2 1 3 3
3 1 4 3
4 1 5 3
我找到了一种在数组中找到索引的方法:
(verices=='B').argmax()
但不确定如何使用它来达到预期的结果。
欢迎任何建议
答案 0 :(得分:2)
尝试:
df.replace(dict(zip(pd.Series(a),pd.Series(a).index)))
Node1 Node2 Immediacy
idx
0 0 2 5
1 0 1 5
2 1 7 3
3 1 3 3
4 1 8 3
答案 1 :(得分:1)
您只能获得string
列-很明显DataFrame.select_dtypes
的string
列,并将DataFrame.apply
与Series.map
一起使用-然后将不匹配的值替换为{ {1}} s:
NaN
使用DataFrame.applymap
和a = np.array(['a', 'B', 'C', 'E', 'G', 'H', 'J', 'D', 'F', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'I', 'K'])
d = dict(zip(a, np.arange(len(a))))
cols = df.select_dtypes(object).columns
df[cols] = df[cols].apply(lambda x: x.map(d))
print (df)
idx Node1 Node2 Immediacy
0 0 0 2 5
1 1 0 1 5
2 2 1 7 3
3 3 1 3 3
4 4 1 8 3
的替代解决方案:
get