Im имеет проблему изменения значений в кадре данных. Я также хочу посоветоваться с проблемой, которую мне нужно решить, и правильным способом использования pandas для ее решения. Я буду признателен за помощь в обоих. У меня есть файл, содержащий информацию о степени соответствия звуковых файлов динамикам. Файл выглядит примерно так:
wave_path spk_name spk_example# score mark comments isUsed
190 122_65_02.04.51.800.wav idoD idoD 88 NaN NaN False
191 121_110_20.17.27.400.wav idoD idoD 87 NaN NaN False
192 121_111_00.34.57.300.wav idoD idoD 87 NaN NaN False
193 103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
194 131_101_02.08.06.500.wav idoD idoD_0 96 HIT VP False
Что мне нужно сделать, это своего рода сложный подсчет. Мне нужно сгруппировать результаты с помощью динамика и рассчитать для каждого динамика некоторые вычисления. Затем я перейду к динамику, который сделал для меня лучший расчет, но прежде чем продолжить, мне нужно отметить все файлы, которые я использовал для вычисления, как используемые, т.е. Изменить значение isUsed для каждой строки, в которой они отображаются (файлы могут появляться более одного раза) до ИСТИНЫ. Затем я делаю еще одну итерацию. Вычислите для каждого динамика, отметьте используемые файлы и т.д., Пока больше не осталось больше динамиков.
Я много думал о том, как реализовать этот процесс с помощью pandas (его довольно легко реализовать на регулярном питоне, но для его выполнения потребуется много циклов и структурирования данных, что, по моему мнению, значительно замедлит процесс, а также Я использую этот процесс, чтобы более глубоко изучить способности pandas)
Я вышел со следующим решением. В качестве этапов подготовки, Ill группирует имя динамика и задает имя файла как индекс методом set_index. Затем я переберу группу groupObj и примените функцию вычисления, которая вернет выбранный динамик и файлы, которые будут помечены как используемые.
Затем Ill перебирайте файлы и помечайте их как используемые (это было бы быстрым и простым, поскольку я заранее задавал их как индексы) и так далее, пока не закончу вычисление.
Во-первых, я не уверен в этом решении, поэтому не стесняйтесь рассказывать мне свои мысли об этом. Теперь я попытался реализовать это и попал в беду:
Сначала я проиндексирован по имени файла, здесь нет проблем:
In [53]:
marked_results['isUsed'] = False
ind_res = marked_results.set_index('wave_path')
ind_res.head()
Out[53]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
131_101_02.08.06.500.wav idoD idoD 99 HIT VP False
144_35_22.46.38.700.wav idoD idoD 96 HIT VP False
41_09_17.10.11.700.wav idoD idoD 93 HIT TEST False
122_188_03.19.20.400.wav idoD idoD 93 NaN NaN False
Затем я выбираю файл и проверяю, что получаю записи, относящиеся к этому файлу:
In [54]:
example_file = ind_res.index[0];
ind_res.ix[example_file]
Out[54]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_1 97 HIT VP False
103_31_18.59.12.800.wav idoD idoD_2 95 HIT VP False
Теперь проблемы здесь тоже. Затем я попытался изменить значение isUsed для этого файла на True, и там, где у меня возникла проблема:
In [56]:
ind_res.ix[example_file]['isUsed'] = True
ind_res.ix[example_file].isUsed = True
ind_res.ix[example_file]
Out[56]:
spk_name spk_example# score mark comments isUsed
wave_path
103_31_18.59.12.800.wav idoD idoD 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_0 99 HIT VP False
103_31_18.59.12.800.wav idoD idoD_1 97 HIT VP False
103_31_18.59.12.800.wav idoD idoD_2 95 HIT VP False
Итак, вы видите проблему. Ничего не изменилось. Что я делаю не так? Описанная выше проблема должна быть решена с помощью pandas?
А также: 1. Как я могу подойти к определенной группе с помощью объекта groupby? bcz Я думал, может быть, вместо того, чтобы устанавливать файлы как индексированные, группируя по файлу, и используя эту группу, чтобы obj применить изменяющуюся функцию ко всем ее вхождениям. Но я не нашел способ приблизиться к определенной группе и передать имя группы в качестве параметра и вызвать действие применительно ко всем группам, а затем действовать только на одном из них, казалось, не "правильно" для меня.
Надеюсь, это не долго...:)