繁体   English   中英

使用 shift 和 groupby 计算

[英]calculation using shift and groupby

我想计算一个新列“更改”。
新列的值应计算如下:
X / Z(上面的一个单元格)->第一行将为空。
--> 第二行是 1 / 6 = 0,16
-> 第二行将是 5 / 10 = 0,5...等等..

df = pd.DataFrame({'id': ['a', 'a', 'a', 'b', 'b','b'],
                    'Z': [6,10,8, 6, 6,15],
                     'X': [2,1,5, 2, 3,20]})
var =  df.columns[1]

df

在论坛里我发现了这个:
df['change'] = df['X'] / df[var].shift(1)它工作正常。 但是我需要插入一个“groupby”参数并且不能让它工作。 我试过这个:
df['change'] = df.groupby('id').apply(lambda x: x['X'] / x[var].shift(1))
但我收到一个错误:
“插入列的索引与框架索引不兼容”

这个lambda function恐怕我还没有完全理解。 任何想法如何做到这一点? 提前致谢!

您可以将X列除以移位组:

df["change"] = df["X"] / df.groupby("id")["Z"].shift(1)
print(df)

印刷:

  id   Z   X    change
0  a   6   2       NaN
1  a  10   1  0.166667
2  a   8   5  0.500000
3  b   6   2       NaN
4  b   6   3  0.500000
5  b  15  20  3.333333

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM