将函数应用于pandas groupby 数据框中的所有列

弗朗西斯科

我有以下数据框(我们称之为data):

id | type | val1 | val2 |
-------------------------
1  |  A   | 10.1 | 11.0 |
1  |  B   | 10.5 | 11.2 |
2  |  A   | 10.7 | 10.9 |
2  |  B   | 10.6 | 11.1 |
3  |  A   | 10.3 | 10.5 |
3  |  B   | 10.4 | 11.3 |

并且我想获得每一的类型ABA- B之间的差异,即我希望结果是:idvalX

id | val1 | val2 |
------------------
1  | -0.4 | -0.2 |
2  |  0.1 | -0.2 |
3  | -0.1 | -0.8 |

我能做到这一点的唯一方法是定义一个函数:

def getDelta(df, valName):
    return df[ df['type']=='A' ][valName].values[0] - df[ df['type']=='B' ][valName].values[0]

并将其分别应用于每一列:

data.groupby('id').apply(getDelta,valName='val1')

然后合并结果以获得我想要的。

有没有更有效的方法来做到这一点?最后,我想将一个函数应用于分组数据帧的列的子集,但该函数必须考虑另一列的值。

sammywemmy

就目前而言,您可以使用np.subtract.reduce,假设在所有情况下 'A' 出现在 'B' 之前,并且没有重复项:

df.groupby("id", sort = False).agg(np.subtract.reduce).reset_index()

   id  val1  val2
0   1  -0.4  -0.2
1   2   0.1  -0.2
2   3  -0.1  -0.8

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用groupby将多个函数应用于Pandas中的多个列?

将加权平均函数应用于pandas groupby对象中的列,但权重总和为零

将具有多个参数的函数应用于pandas groupby对象

将函数应用于python熊猫中的groupby对象

将排名应用于Pandas Groupby中的每个组

将函数应用于pandas数据框中的所有其他列

将函数应用于数据框GroupBy对象并返回数据框

将函数应用于pandas数据框中的列

Pandas 如何将函数应用于 groupby().first()

将Groupby函数应用于python中的多列并进行计算

按列将函数应用于Pandas数据框

将函数应用于 Pandas 数据框的两列

如何使用pandas Groupby将不同的聚合函数应用于同一列

如何将函数应用于依赖多个列的groupby子组?

将函数应用于带有两个参数的pandas数据框中的列

将列表函数应用于itertools.groupby中的嵌套生成器

如何将groupBy和聚合函数应用于PySpark DataFrame中的特定窗口?

将函数应用于我的数据框中的所有列

如何将聚合函数应用于Pandas中数据透视表的所有列

如何将 Pandas GroupBy 的发现应用于源数据

Pandas groupby汇总将多个功能应用于多个列

是否可以将 python pandas 中的 groupby 应用于已经分组的对象?

熊猫groupby并将函数应用于数字列

将功能应用于Pandas Groupby

pandas groupby应用于多个列以生成新列

Pandas Complex GroupBy 并应用于机器学习数据集

pandas groupby将相同的功能应用于多列

pyspark相当于pandas groupby +应用于列

将 lambda 函数应用于 Pandas 数据框