gpt4 book ai didi

python - pandas 中 group by 的条件比率

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:31 25 4
gpt4 key购买 nike

我想对第 1 列进行分组,然后根据第 3 列中的值获取第 2 列中值的总和,然后除以第 2 列中的总和,仍按第 1 列分组。

下面给出一个例子:

d = {'col1': [1, 2, 1, 2], 'col2': [3, 4, 2, 7], 'col3': [1, 1, 0, 0]}
df = pd.DataFrame(data=d)

col1 col2 col3
0 1 3 1
1 2 4 1
2 1 2 0
3 2 7 0

我想创建一个新列:col4。对于此列,我按 col1 进行分组,然后获取 col2 值的百分比,其中 col3 为 1 除以 col2 的总分组总和。这样我最终会得到以下结果。 (我把它用分数表示,以便更容易进行计算。

    col1    col2    col3    col4
0 1 3 1 3/5
1 2 4 1 4/11
2 1 2 0 3/5
3 2 7 0 4/11

我尝试了以下方法,但不幸的是这不起作用:

df.col4 = df.groupby(['col1']).transform(lambda x: np.where(x.col3 == 1, x.col2, 0).sum()) / df.groupby(['col1']).col2.transform('sum')

编辑 |扩展示例

我扩展了这个例子,因为Wen提供的解决方案只涵盖了上面的简单例子。

d = {'col1': [1, 2, 1, 2, 1, 2], 'col2': [3, 4, 2, 7, 6, 8], 'col3': [1, 1, 0, 0, 1, 0]}
df = pd.DataFrame(data=d)
col1 col2 col3
0 1 3 1
1 2 4 1
2 1 2 0
3 2 7 0
4 1 6 1
5 2 8 0

编辑 |可能的解决方案

我找到了一个可能的解决方案。我想以更干净的方式做到这一点,但这是可读的并且非常简单。当然,任何组合这两行代码的替代方案仍然值得赞赏。

df['col4'] = np.where(df.col3 == 1, df.col2, 0)
df['col4'] = df.groupby(['col1']).col4.transform('sum') / df.groupby(['col1']).col2.transform('sum')

最佳答案

您可能需要更正预期的输出,然后在过滤器后使用 map

df.col1.map(df.loc[df.col3==1,].set_index('col1').col2)/df.groupby(['col1']).col2.transform('sum')
Out[566]:
0 0.600000
1 0.363636
2 0.600000
3 0.363636
dtype: float64

关于python - pandas 中 group by 的条件比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52593111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com