Как поместить словарный вывод функции в информационный кадр, когда функция выполняется n раз? - PullRequest
0 голосов
/ 17 октября 2019

Итак, я написал эту функцию для конкретного игрового симулятора. Я удалил несущественную часть из моего кода здесь.

def play(games=1):
    for j in range (1,games+1):
        from itertools import chain
        Player1,Player2=deal()
        #print(Player1,Player2)
        l1=[]
        l2=[]
        l3=[]
        l4=[]
        count = 0
        for i in range(0,26,2):
            .
            .
            .
        Stats={'Initial total of Player 1 ':sum(Player1),
               'Initial total of Player 2 ':sum(Player2),
               'Number of Ties ':count,
               'Maximum round total won ':max(l4),
               'Final total of Player 1 ':sum(l1),
               'Final total of Player 2 ':sum(l2)}
        print (Stats)

Итак, play() даст {'Initial total of Player 1 ': 185, 'Initial total of Player 2 ': 179, 'Number of Ties ': 0, 'Maximum round total won ': 40, 'Final total of Player 1 ': 229, 'Final total of Player 2 ': 135} в качестве вывода.

Аналогично play(2) даст {'Initial total of Player 1 ': 164, 'Initial total of Player 2 ': 200, 'Number of Ties ': 0, 'Maximum round total won ': 34, 'Final total of Player 1 ': 76, 'Final total of Player 2 ': 288} {'Initial total of Player 1 ': 179, 'Initial total of Player 2 ': 185, 'Number of Ties ': 1, 'Maximum round total won ': 43, 'Final total of Player 1 ': 155, 'Final total of Player 2 ': 209}. Здесь «2» в качестве аргумента означает количество игровых симуляций.

Теперь мне нужно, как вставить каждый словарь в pandas dataframe, где индексами словаря будут столбцы, а значениями будут строки. Так, например, «5» моделирование игры будет означать фрейм данных с 5 строками данных, по одному на каждый раз, когда создается словарь.

1 Ответ

0 голосов
/ 17 октября 2019

Привет и добро пожаловать в StackOverflow!

Проблема в том, что мы запускаем цикл, а не сохраняем значения. Мы просто печатаем их. Попробуйте что-то вроде этого:

def play(games=1):
    rounds = []
    for j in range (1, games + 1):
        from itertools import chain
        Player1, Player2 = deal()
        #print(Player1,Player2)
        l1 = []
        l2 = []
        l3 = []
        l4 = []
        count = 0
        for i in range(0,26,2):
            .
            .
            .
        stats = {'Initial total of Player 1 ':sum(Player1),
               'Initial total of Player 2 ':sum(Player2),
               'Number of Ties ':count,
               'Maximum round total won ':max(l4),
               'Final total of Player 1 ':sum(l1),
               'Final total of Player 2 ':sum(l2)}
        print(stats)
        rounds.append(stats)
    return rounds

Теперь, когда вы запустите эту функцию, она вернет список словарей. Каждый словарь содержит значения одной строки данных.

data_rows = play()

Чтобы преобразовать это во фрейм данных:

df = pd.DataFrame.from_records(data_rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...