改写熊猫中的不同值

时间:2020-08-05 21:48:57

标签: python pandas dataframe

我有一个应该训练的熊猫数据框,但在必须重新组织数据之前。

我应该如下所示对随机列值进行洗牌(玩家1和2的匹配值)

起点

|-----------|-----------|---------------|--------------|---------------|--------------|
|   Winner  |   Loser   | Winner Weight | Loser Weight | Winner Height | Loser Height |
|-----------|-----------|---------------|--------------|---------------|--------------|
|     Tom   |    Jack   |      88       |      77      |      178      |     189      |
|     Ash   |    Zuck   |      90       |      69      |      190      |     177      |
|     Ben   |    Mark   |      86       |      88      |      198      |     179      |
|-----------|-----------|---------------|--------------|---------------|--------------|

终点

|-----------|-----------|---------------|--------------|--------------|-------------|---------|
| Player 1  |  Player 2 |   P1 Weight   |   P2 Weight  |   P1 Height  |   P2 Height |  Winner |
|-----------|-----------|---------------|--------------|--------------|-------------|---------|
|    Jack   |    Tom    |      77       |      88      |      189     |     177     |    1    |
|     Ash   |    Zuck   |      90       |      69      |      190     |     177     |    0    |
|    Mark   |    Ben    |      88       |      86      |      179     |     198     |    1    |
|-----------|-----------|---------------|--------------|--------------|-------------|---------|

1 个答案:

答案 0 :(得分:0)

一种方法是转换为记录,对每个记录应用逻辑,然后转换回df:

def convert_d(d):    
    new_d = {}
    p1 = random.choice(['Winner', 'Loser'])
    p2 = [x for x in ['Winner', 'Loser'] if x!=p1][0]
    new_d['Player 1'] = d[p1]
    new_d['Player 2'] = d[p2]
    new_d['P1 Weight'] = d[f'{p1} Weight']
    new_d['P2 Weight'] = d[f'{p2} Weight']
    new_d['P1 Height'] = d[f'{p1} Height']
    new_d['P2 Height'] = d[f'{p2} Height']
    if p1=='Winner':
        new_d['Winner'] = 0
    else:
        new_d['Winner'] = 1
    return new_d

pd.DataFrame.from_records([convert_d(d) for d in df.to_dict(orient='records')])


    Player 1    Player 2    P1 Weight   P2 Weight   P1 Height   P2 Height   Winner
0   Tom         Jack        88            77           178      189         0
1   Ash         Zuck        90            69           190      177         0
2   Ben         Mark        86            88           198      179         0