我有:
idx Node1 Node2 Immediacy
0 a C 5
1 a B 5
2 B D 3
3 B E 3
4 B F 3
和一个数组(Verice):
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()
但我不知道如何利用这一点来达到预期的效果。
欢迎任何建议
发布于 2019-04-18 03:54:12
试着:
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
发布于 2019-04-18 03:54:38
您只能获得string
的列(很明显,DataFrame.select_dtypes
是string
的列,并在Series.map
中使用DataFrame.apply
),然后将不匹配的值替换为NaN
:
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
基于DataFrame.applymap
和get
的替代解决方案
df[cols] = df[cols].applymap(d.get)
https://stackoverflow.com/questions/55745424
复制相似问题