Создайте новую переменную, зависящую от цикла, перебирая строки - PullRequest
0 голосов
/ 09 января 2019

Я перевожу этот кусок кода sas в панд. Код sas в основном группирует наблюдения по ключу. Внутри каждой группы создается новая переменная A, где A[0] = B[0] / C[0] / .25. Тогда для i >= 1, A[i] = A[i - 1] * .85 + B[i] / C[i]. B и C - другие переменные в кадре данных.

Я не думаю, что df.groupby().attribute делает это.

data data;
set data2;
by key1 key2;
retain A;
if first.key1 then A = (B / C) /(.25);
else A = A * .85 + B / C;
run;

Ожидаемый результат для группы g01

key1 B C A
g01  1 2 2       2     = 1 / 2 /.25
g01  2 1 3.7     3.7   = 2   * .85 + 2 / 1
g01  2 4 3.645   3.645 = 3.7 * .85 + 2 / 4

Я думал о том, чтобы сначала получить ключи группы и прокрутить их имена. Но, может быть, есть лучший способ?

1 Ответ

0 голосов
/ 10 января 2019

Следующее решение работает с использованием pd.iterrows(), учитывая, что у вас есть DataFrame df, содержащий столбцы B и C, которые содержат значения, а также столбец key1 который содержит название группы:

g = None
for i, r in df.iterrows():
    if g != r.key1:
        a = r.B / r.C / .25
    else:
        a = a * .85 + r.B / r.C
    df.loc[i, 'A'] = a
    g = r.key1

Невозможно решить эту проблему параллельно, из-за зависимости в цикле , на которую указывает ваше использование [i - 1] и мое кэширование переменной a и g .

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