2017-03-01 1 views
0

Ich versuche, eine Zeile zu meinem pandas.DataFrame basierend auf den Klassenattributen dynamisch hinzuzufügen, aber es funktioniert aus irgendeinem Grund nicht. Hoffentlich ein Beispiel macht mehr Sinn:Hinzufügen von Zeile dynamisch basierend auf dem Klassenattribut zu einem DataFrame

import numpy as np 
import pandas as pd 

class match: 
def __init__(self): 
    self.position = np.zeros(shape = (3, 3)) 
    self.moves = [] 

def PlayMove(self, x_coordinate, y_coordinate, player_name): 
    if player_name == "player1": 
     self.position[x_coordinate, y_coordinate] = 1 
    if player_name == "player2": 
     self.position[x_coordinate, y_coordinate] = 4 
    self.moves.append(pd.DataFrame(self.position.reshape(1, 9))) 

match1 = match() 
match1.PlayMove(1,2,"player1") 
print(match1.position) 
print(match1.moves) 
match1.PlayMove(2,2,"player1") 
print(match1.position) 
print(match1.moves) 

Die gleiche Bewegung zweimal ausgibt, während ich den ersten Schritt und den zweiten Schritt in einer separaten Zeilen speichern möge. Jedes Mal, wenn ein Zug gespielt wird, möchte ich die neue Position nacheinander in match1.moves und der letzten Position in match1.position speichern.

Antwort

1

Es gab ein paar Probleme mit Ihrer Implementierung.

  1. Wenn Sie einen Datenrahmen wollen, self.move keine Liste
  2. sein sollten, wenn Sie in jeder Reihe einzigartige Board Schnappschüsse wollen, dann müssen Sie das Board jedes Mal kopieren Sie sie speichern.

Code:

class match: 
    def __init__(self): 
     self.position = np.zeros(shape=(3, 3)) 
     self.moves = None 

    def PlayMove(self, x_coordinate, y_coordinate, player_name): 
     if player_name == "player1": 
      self.position[x_coordinate, y_coordinate] = 1 
     else: 
      self.position[x_coordinate, y_coordinate] = 4 
     move = pd.DataFrame(np.array(self.position).reshape(1, 9)) 
     self.moves = pd.concat([self.moves, move]) 

Testcode:

match1 = match() 
match1.PlayMove(1, 2, "player1") 
print(match1.position) 
print('\n1:\n', match1.moves) 
match1.PlayMove(2, 2, "player2") 
print('\n', match1.position) 
print('\n2:\n', match1.moves) 

Ergebnisse:

[[ 0. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 0.]] 

1: 
    0 1 2 3 4 5 6 7 8 
0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 

[[ 0. 0. 0.] 
[ 0. 0. 1.] 
[ 0. 0. 4.]] 

2: 
    0 1 2 3 4 5 6 7 8 
0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 
0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 4.0 
Verwandte Themen