如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?
Posted
技术标签:
【中文标题】如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?【英文标题】:How to add a column to a dataframe that is dependant on the avarage of a group in the dataframe or external dataframe? 【发布时间】:2021-11-11 10:52:16 【问题描述】:我有一个数据框,我想为其计算一个新列。 该列应等于 x_i/E(x|Y=y_i)。其中 x_i 是第 i 行和第 X 列上的某个元素。 代码方面是:
df = pd.DataFrame(dict(
Y=['y1'] * 2 + ['y2'] * 3 + 1 * ['y1'],
X=range(1, 7)
))
Y X
0 y1 1
1 y1 2
2 y2 3
3 y2 4
4 y2 5
5 y1 6
最终的形式应该是这样的
Y X C_O
0 y1 1 1/3
1 y1 2 2/3
2 y2 3 3/4
3 y2 4 4/4
4 y2 5 5/4
5 y1 6 6/3
我尝试了类似的方法,但没有奏效。
df["C_0"]=[df["X"]*df.groupby('Y')['X'].mean()]
另一个想法是遍历列表,但数据框有数以万计的项目,因此可能应该以其他更简单的方式完成。
【问题讨论】:
你能解释一下分母“E(x|Y=y_i)”的公式是什么意思吗? 【参考方案1】:IIUC,您的分组是正确的,但有一个例外 - 您需要将其转换回 df。
这样做:
df['C_O'] = df['X']/df.groupby(['Y'])['X'].transform('mean')
你会得到:
Y X C_O
0 y1 1 0.333333
1 y1 2 0.666667
2 y2 3 0.750000
3 y2 4 1.000000
4 y2 5 1.250000
5 y1 6 2.000000
改变格式:
df['C_O'] = df['X'].astype(str)+'/'+df.groupby(['Y'])['X'].transform('mean').astype(str)
你会得到:
Y X C_O
0 y1 1 1/3
1 y1 2 2/3
2 y2 3 3/4
3 y2 4 4/4
4 y2 5 5/4
5 y1 6 6/3
【讨论】:
以上是关于如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?的主要内容,如果未能解决你的问题,请参考以下文章