用整数列表 /元组替换PANDAS DataFrame列中的值



我想替换pandas dataframe的3列 df 使用词典 chess_dict 将象棋方形坐标包含作为字符串作为字符串来映射它们以2x1整数列表的形式到笛卡尔坐标。

我尝试使用替换方法,但由于某种原因,它仅替换为列表的第一个整数,而不是两个

例如。('a1','h6'( ->([0,0],[7,5](

>>>chess_dict
 {'a1': [0, 0],
 'a2': [0, 1],
 ...
 'h5': [7, 4],
 'h6': [7, 5],
 'h7': [7, 6],
 'h8': [7, 7]}
>>>df
      WK  WR  BK plays outcome
0     h4  e6  a4     b       w
1     a6  h4  g8     w       w
2     f5  a3  d1     w       w
3     c2  h3  f5     w       w
...
>>>df.ix[:,0].replace(chess_dict, inplace=True)
>>>df.ix[:,1].replace(chess_dict, inplace=True)
>>>df.ix[:,2].replace(chess_dict, inplace=True)
>>>df
      WK  WR  BK plays outcome
0      7   4   0     b       w
1      5   3   7     w       w
2      5   0   3     w       w
3      1   2   4     w       w
...
  • 我尝试用笛卡尔坐标替换为字符串,然后将字符串转换为整数列表并起作用,但是由于我是Python和Pandas的新手,所以我猜想有一种更简单的方法使用<<strong>替换,但是我缺少一些基本的东西,我似乎无法弄清楚。

  • 我也尝试了以相同结果的语法:

    df.ix[:,0].replace(to_replace = chess_dict.keys(), value = chess_dict.values(), inplace=True)
    
  • 我还尝试使用笛卡尔坐标(0,0(,(0,1(等的整数元组,但是现在只插入了dataframe列中的最后一个值,而不是第一个值P>

    WK  WR  BK plays outcome
    0      3  g7  b4     b       w
    1      3  h7  d1     b       w
    2      3  h6  f5     w       w
    3      6  d5  b1     b       w
    

选项1

chess_dict = {
    r + c: [i, j]
        for i, r in enumerate(list('abcdefgh'))
        for j, c in enumerate(list('12345678'))
}
df.iloc[:, :3].stack().map(chess_dict).unstack().join(df.iloc[:, 3:])
       WK      WR      BK plays outcome
0  [7, 3]  [4, 5]  [0, 3]     b       w
1  [0, 5]  [7, 3]  [6, 7]     w       w
2  [5, 4]  [0, 2]  [3, 0]     w       w
3  [2, 1]  [7, 2]  [5, 4]     w       w

选项2

df.applymap(lambda x: chess_dict.get(x, x))
       WK      WR      BK plays outcome
0  [7, 3]  [4, 5]  [0, 3]     b       w
1  [0, 5]  [7, 3]  [6, 7]     w       w
2  [5, 4]  [0, 2]  [3, 0]     w       w
3  [2, 1]  [7, 2]  [5, 4]     w       w

最新更新