gpt4 book ai didi

python - pandas:仅当满足条件时才进行分组

转载 作者:行者123 更新时间:2023-11-30 22:46:17 25 4
gpt4 key购买 nike

我有以下多索引 DataFrame:

        m     dist

a a 2 5
b 3 8
c 4 12
d 2 3
b a 2 5
b 3 8
c 4 14
d 2 27

我想根据算法计算一个新列 s。例如,对于 (a,a),算法为:

选择具有相同 0 级索引的所有其他行:--> (a,a), (a,b), (a,c), (a,d)

从此选择中:选择 dist <= 自己的 dist 的行--> (a,a) 和 (a,d)

获取该选择的第 m 列的总和 --> 2 + 2 = 4

这将产生以下数据框:

        m     dist  s

a a 2 5 4
b 3 8 7
c 4 12 11
d 2 3 2
b a 2 5 2
b 3 8 5
c 4 14 9
d 2 27 11

通过循环遍历行、为每一行创建一个新的数据框、选择具有正确距离的行并进行分组,这将很容易。但对于我当前的数据集来说,这太慢了。这可以通过一些不错的 groupby/lambda 魔法来完成吗?

最佳答案

您可以按 dist 对数据框进行排序,然后对列 m 执行 cumsum:

df['s'] = df.sort_values('dist').groupby(level=0).m.cumsum()

enter image description here

这假设 dist 列中没有重复项,如果有,则对按 dist 分组的列 s 进行进一步转换,并且第一级索引应满足:

df['s'] = df.groupby([df.index.get_level_values(0), 'dist']).s.transform('max')

关于python - pandas:仅当满足条件时才进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40915492/

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