在不聚合的情况下对组应用操作
Applying operations on groups without aggregating
我想对一个数据框的多个组应用一个操作,然后用结果填充该组的所有值。让我们以 mean 和 np.cumsum 为例,以下数据框:
df=pd.DataFrame({"a":[1,3,2,4],"b":[1,1,2,2]})
看起来像这样
a b
0 1 1
1 3 1
2 2 2
3 4 2
现在我想按 b
对数据帧进行分组,然后在每组中取 a
的平均值,然后将 np.cumsum
应用于平均值,然后替换所有值a
由(组依赖)结果。
对于前三个步骤,我会这样开始
df.groupby("b").mean().apply(np.cumsum)
这给出了
a
b
1 2
2 5
但是我想得到的是
a b
0 2 1
1 2 1
2 5 2
3 5 2
有什么好的方法可以解决这个问题吗?
您可以通过 Series
:
使用 map
df1 = df.groupby("b").mean().cumsum()
print (df1)
a
b
1 2
2 5
df['a'] = df['b'].map(df1['a'])
print (df)
a b
0 2 1
1 2 1
2 5 2
3 5 2
我想对一个数据框的多个组应用一个操作,然后用结果填充该组的所有值。让我们以 mean 和 np.cumsum 为例,以下数据框:
df=pd.DataFrame({"a":[1,3,2,4],"b":[1,1,2,2]})
看起来像这样
a b
0 1 1
1 3 1
2 2 2
3 4 2
现在我想按 b
对数据帧进行分组,然后在每组中取 a
的平均值,然后将 np.cumsum
应用于平均值,然后替换所有值a
由(组依赖)结果。
对于前三个步骤,我会这样开始
df.groupby("b").mean().apply(np.cumsum)
这给出了
a
b
1 2
2 5
但是我想得到的是
a b
0 2 1
1 2 1
2 5 2
3 5 2
有什么好的方法可以解决这个问题吗?
您可以通过 Series
:
map
df1 = df.groupby("b").mean().cumsum()
print (df1)
a
b
1 2
2 5
df['a'] = df['b'].map(df1['a'])
print (df)
a b
0 2 1
1 2 1
2 5 2
3 5 2