如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?

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

【讨论】:

以上是关于如何将列添加到依赖于数据帧或外部数据帧中组的平均值的数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

gitlab中组的分类及权限介绍

如何计算 MDX 中组的总和?

如何在两个 Pandas 数据帧中找到元素调和平均值

计算 SQL 中组的重叠时间(以秒为单位)

Spark将包含元组的列添加到数据帧

在R中改变ggplot中组的顺序