我正在将这段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
我一直在考虑先获取组密钥并遍历这些组名称。但是也许有更好的方法吗?
答案 0 :(得分:0)
假设您有一个DataFrame df
,其中包含保存值的列B
和C
,以及列{拥有群组名称的{1}}:
key1
由于pd.iterrows()
,无法并行解决此问题,这由您使用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]
和{{ 1}}。