Ячейки Pandas DataFrame в качестве счетчиков - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь создать панду DataFrame "B", принимая во внимание чтение строк за строкой другого DataFrame "A".

Дело в том, что я хочу заполнить значения ячеек нового фрейма данных "B", считая конкретные случаи, которые происходят в первом наборе данных "A".

Я не могу инициализировать DataFrame "B" со всеми нулями, потому что я не знаю, сколько у него будет строк.

Если я не инициализирую значения ячеек DataFrame "B", я получаюэта ошибка

KeyError: "the label ['0'] is not in the [index]"

при попытке:

for i in range(len(df_A.index)):

   if (int(df_A.iloc[i][3])) == sec_types_crmc[3]:

      df_B.at["'"+str(i)+"'", 'bin_0'] = df_B.loc["'"+str(i)+"'"]['bin_0'] + 1

1 Ответ

0 голосов
/ 08 февраля 2019
  1. См. этот пост .

Вы можете использовать df.loc [_not_yet_existing_index_label_] = new_row

Использование df.at вызовет KeyError, когда метка не существует в DataFrame.

ИЛИ, так как добавление новых строк требует большого объема памяти, я настоятельно рекомендую это решение , которое решает вашу проблему, хотя и не так, как вы просили.(Создайте словарь и создайте экземпляр DataFrame B, как только вы закончите итерацию по A.)

Как уже упоминалось @philipzhou, вы можете использовать collections.counterкоторый автоматически изменит что-то вроде этого:

print(collections.Counter(['a', 'b', 'c', 'a', 'b', 'b']))
Output:
Counter({'b': 3, 'a': 2, 'c': 1})

, где вы можете представить, что каждая буква здесь представляет собой индекс строки, добавляемый в коллекцию и подсчитывающий по мере прохождения A.Затем следуйте этим инструкциям , чтобы превратить это в df_B.В основном:

df_B = pd.DataFrame.from_dict(a_counter, orient='index').reset_index()

, где a_counter - ваш collection.counter объект.

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