python - Pandas groupby diff 删除列

标签 python pandas dataframe

我有一个这样的数据框:

d = {'id': ['101_i','101_e','102_i','102_e'], 1: [3, 4, 5, 7], 2: [5,9,10,11], 3: [8,4,3,7]}
df = pd.DataFrame(data=d)

df

我想减去所有具有相同前缀 ID 的行,即用 101_e 减去 101_i 行的所有值,反之亦然。我为此使用的代码是:

df['new_identifier'] = [x.upper().replace('E', '').replace('I','').replace('_','') for x in df['id']]
df = df.groupby('new_identifier')[df.columns[1:-1]].diff().dropna()

我得到这样的输出:

df2

我看到我丢失了我创建的新列 new_identifier。有什么办法可以保留它吗?

最佳答案

您可以为已知类型(在本例中为 int 或 float)的列定义特定的聚合函数(在本例中为第 1、2 和 3 列的 np.diff())。

import numpy as np
df.groupby('new_identifier').agg({i: np.diff for i in range(1, 4)}).dropna()

结果:

                1  2  3
new_identifier         
101             1  4 -4
102             2  1  4

关于python - Pandas groupby diff 删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71272530/

相关文章:

python - 将单例矩阵的 Pandas 数据框转换为数字数据框

python - 根据python中的条件更新多个列值

scala - Scala 中的 Spark 分组 map UDF

python - 在 MultiIndex Pandas DataFrame 中按列进行子选择

python - 合并具有相同值的特定键的字典

python - 用C实现一个简单的python函数简单吗?

python - 通过将条件语句应用于数据类型日期时间和整数的多个其他列来创建列

Python - Crontab 脚本不显示枕头图像

python - 如何在Python中将文本文件解析为字典,其中一行键后跟两行值

python - 'pandas' 没有属性 'read_csv'"