У меня довольно сложная (для меня) ситуация, когда мне нужно обработать фрейм данных, который имеет несколько строк для каждого индекса, который может быть одним из трех сценариев ios в зависимости от значения определенного столбца.
Фрейм данных выглядит так:
Index Account Postfix ID val1 val2
AA11 AA 11 aa 1 2
AA11 AA 11 aa 1 2
AA11 AA 11 aa 1 2
BB22 BB 22 bb 1 1
BB22 BB 22 NA 2 2
BB22 BB 22 NA 3 3
CC33 CC 33 NA 1 2
CC33 CC 33 NA 1 2
CC33 CC 33 NA 1 2
Каждый уникальный индекс может попасть в один из трех сценариев ios:
- A: ID всегда заполняется, возьмите val1 и val2 из первой строки по каждому индексу
- S: ID иногда заполняется, берется val1 из строки, где ID! = Na, и val2 суммируются из строк, где ID = Na
- N: ID никогда не заполняется , сумма val1 и val2 по всем строкам
Моя первая проблема заключается в том, что я не могу понять, как проверить значение столбца в нескольких строках для одного и того же индекса.
Я был думая что-то вроде:
indices = df.index.unique()
for index in indices:
df[ScenarioA] = np.all(df.loc[index, ID])
df[ScenarioN] = np.all(np.logical_not(df.loc[index, ID]))
df[ScenarioS] = np.logical_and(np.logical_not(df[ScenarioA]),np.logical_not(df[ScenarioN]))
Но это приводит к тому, что все строки помечаются как ScenarioN, когда на самом деле результат должен выглядеть так:
Index Account Postfix ID val1 val2 ScenarioA ScenarioS ScenarioN
AA11 AA 11 aa 1 2 True False False
AA11 AA 11 aa 1 2 True False False
AA11 AA 11 aa 1 2 True False False
BB22 BB 22 bb 1 1 False True False
BB22 BB 22 NA 2 2 False True False
BB22 BB 22 NA 3 3 False True False
CC33 CC 33 NA 1 2 False False True
CC33 CC 33 NA 1 2 False False True
CC33 CC 33 NA 1 2 False False True
Как только я это сделал, я нужно выполнить суммы и закончить с чем-то вроде приведенного ниже, но я не думаю, что эта часть будет слишком сложной, поскольку я могу go по Сценарию и выполнять вычисления по мере необходимости:
Index Account Postfix ID val1 val2
AA11 AA 11 aa 1 2
BB22 BB 22 bb 1 5
CC33 CC 33 NA 3 6
Что я делаю не так в части, где Я пытаюсь назначить T / F столбцам сценария?