使用 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['change'] = df['X'] / df[var].shift(1)
它工作正常。但是我需要插入一个“groupby”参数并且无法让它工作。
我试过这个:
df['change'] = df.groupby('id').apply(lambda x: x['X'] / x[var].shift(1))
但是我得到一个错误:
“插入列的索引与框架索引不兼容”
恐怕我还没有完全理解这个lambda函数。
任何想法如何做到这一点?
提前致谢!
您可以将 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
我想计算一个新列“变化”。
新列的值应按如下方式计算:
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['change'] = df['X'] / df[var].shift(1)
它工作正常。但是我需要插入一个“groupby”参数并且无法让它工作。
我试过这个:
df['change'] = df.groupby('id').apply(lambda x: x['X'] / x[var].shift(1))
但是我得到一个错误:
“插入列的索引与框架索引不兼容”
恐怕我还没有完全理解这个lambda函数。 任何想法如何做到这一点? 提前致谢!
您可以将 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