У меня есть кадр данных pandas с одним столбцом, содержащим списки. Я хочу sh разделить каждый элемент списка в каждой строке на скалярное значение в другом столбце. В следующем примере я wi sh, чтобы разделить каждый элемент в a на b:
a b
0 [11, 22, 33] 11
1 [12, 24, 36] 2
2 [33, 66, 99] 3
Таким образом получится следующий результат:
a b c
0 [11, 22, 33] 11 [1.0, 2.0, 3.0]
1 [12, 24, 36] 2 [6.0, 12.0, 18.0]
2 [33, 66, 99] 3 [11.0, 22.0, 33.0]
Я могу добиться этого следующим кодом:
import pandas as pd
df = pd.DataFrame({"a":[[11,22,33],[12,24,36],[33,66,99]], "b" : [11,2,3]})
result = {"c":[]}
for _, row in df.iterrows():
result["c"].append([x / row["b"] for x in row["a"]])
df_c = pd.DataFrame(result)
df = pd.concat([df,df_c], axis="columns")
Но явная итерация по строкам и сбор результата в словаре, преобразование его в фрейм данных и затем конкатенация в исходный фрейм данных кажутся очень неэффективными и inelegant .
Есть ли у кого-нибудь лучшее решение?
Заранее спасибо и ура!
PS : Если вам интересно, зачем мне хранить списки в столбце: это результирующие амплитуды преобразования Фурье.
Почему я не использую один столбец для каждой частоты?
- Создание нового столбца для каждой частоты происходит ужасно медленно
- При разных частотах дискретизации и размерах окна БПФ в моем проекте существует несколько наборов частот.