熊猫-根据单独的数组索引替换列值

时间:2019-04-18 11:49:29

标签: pandas

我有:

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()

但不确定如何使用它来达到预期的结果。

欢迎任何建议

2 个答案:

答案 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_dtypesstring列,并将DataFrame.applySeries.map一起使用-然后将不匹配的值替换为{ {1}} s:

NaN

使用DataFrame.applymapa = 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