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

标签 python pandas

我有以下多索引 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/

相关文章:

python - PyQt - 重新实现 QSqlTableModel 数据方法时出现问题

python - 我们可以在 python 中使用 boto3 获取 AWS Cloudtrail 日志吗?

python - 如何仅更改 pandas Dataframe barplot 中的 xticks 字体大小?

python - 我的 sum 函数没有对某些列的值求和

javascript - Google oauth2 web 应用程序与 javascript 应用程序

python - Python 中的 Scrapy 迭代问题

python - 查看函数列表时调用提示/文档字符串?

python - Pandas 数据帧 : replace nan values with average of columns

python - 合并两个镜像 Pandas 列

python - 带有 2 行标题并导出到 csv 的 pandas 数据框