Мне нужно добавить новый столбец («дельта») в фрейм данных, вычислив разницу между каждым значением строки в столбце «значение» и значением в том же столбце, когда num = 5, с тем же цветом и для каждого группа. Результат должен быть следующим:
group color num value delta
Group1 red 1 0.1 -0.4 (0.1 - 0.5 (0.5 is the value in Group1, color=red and num=5))
Group1 green 1 0.2 -0.4 (0.2 - 0.6 (0.6 is the value in Group1, color=green and num=5))
Group1 blue 1 0.3 -0.4 (0.3 - 0.7)
Group1 yellow 1 0.6 0.1 (0.6 - 0.5)
Group1 red 5 0.5 0
Group1 green 5 0.6 0
Group1 blue 5 0.7 0
Group1 yellow 5 0.5 0
Group1 red 7 0.8 0.3
Group1 green 7 0.9 0.3
Group1 blue 7 0.7 0
Group1 yellow 7 0.6 0.1
Group2 red 1 0.1 etc.
Я попытался использовать pivot_table, я полагаю, это начало, но я действительно не вижу, как выполнить это условное вычисление.
Вы есть идеи, как это можно сделать?
Фактический код:
import plotly.graph_objs as go
import pandas as pd
d = {
"group" : ["Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group1", "Group2", "Group2", "Group2", "Group2", "Group2", "Group2", "Group2", "Group2","Group2", "Group2", "Group2", "Group2"],
"color" : ["red", "green", "blue", "yellow", "red", "green", "blue", "yellow", "red", "green", "blue", "yellow", "red", "green", "blue", "yellow", "red", "green", "blue", "yellow", "red", "green", "blue", "yellow"],
"num" : [1, 1, 1, 1, 5, 5, 5, 5, 7, 7, 7, 7, 1, 1, 1, 1, 5, 5, 5, 5, 7, 7, 7, 7],
"value" : [0.1, 0.2, 0.3, 0.6, 0.5, 0.6, 0.7, 0.5, 0.8, 0.9, 0.7, 0.6, 0.1, 0.2, 0.3, 0.6, 0.5, 0.6, 0.7, 0.5, 0.8, 0.9, 0.7, 0.6,]
}
df = pd.DataFrame(d)
df_pivot = pd.pivot_table(df, values = ["value"], index = ["group", "color", "num"])
df_pivot["delta"] = df_pivot["value"] # what/how should I substract !?
print(df_pivot)