Pandas - добавить несколько значений в строку во время цикла - PullRequest
0 голосов
/ 11 июля 2019

Я работаю с фреймом данных внутри цикла while, который необходимо обновлять в зависимости от времени симуляции. Вот пример:

import pandas as pd
import random

n = 0
df = pd.DataFrame(columns=['A', 'B'])

while n < 10:
  df = df.append({'A': random.uniform(0, 1), 'B': random.uniform(0, 1)}, 
                 ignore_index=True)
  df = df.append({'A': random.uniform(0, 1), 'B': random.uniform(0, 1)}, 
                 ignore_index=True)

  df['New Column'] = n

  print('This value should be added to the new rows only ' + str(n))
  n += 1
  print(df)

Это приводит к немедленному обновлению всего нового столбца, что в моем случае нежелательно. Вот первые три гравюры:

This value should be added to the new rows only 0
          A         B  New Column
0  0.242312  0.369978           0
1  0.709112  0.650794           0
This value should be added to the new rows only 1
          A         B  New Column
0  0.242312  0.369978           1    <- should have been 0
1  0.709112  0.650794           1    <- should have been 0
2  0.293787  0.229019           1
3  0.828184  0.917984           1
This value should be added to the new rows only 2
          A         B  New Column
0  0.242312  0.369978           2    <- should have been 0
1  0.709112  0.650794           2    <- should have been 0
2  0.293787  0.229019           2    <- should have been 1
3  0.828184  0.917984           2    <- should have been 1
4  0.644289  0.589050           2
5  0.371361  0.759865           2

Могу ли я сделать это за одну операцию или мне нужно скопировать в другой фрейм данных и затем добавить это?

1 Ответ

1 голос
/ 11 июля 2019

Используйте следующий код:

import pandas as pd
import random

n = 0
df = pd.DataFrame(columns=['A', 'B', 'New Column'])

while n < 10:
  df = df.append({'A': random.uniform(0, 1), 'B': random.uniform(0, 1), 'New Column': n}, 
                 ignore_index=True)
  df = df.append({'A': random.uniform(0, 1), 'B': random.uniform(0, 1), 'New Column': n}, 
                 ignore_index=True)

  print('This value should be added to the new rows only ' + str(n))
  n += 1
  print(df)

Просто просто наберите New Column в начале, а затем добавьте значение, как вы делаете с A и B внутри append, я делаю New Column также в том же append s.

Ваш код не работает, так как вы изменяете все значения в каждом цикле, когда вам это нужно для добавленного фрейма данных, что я и делаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...