pandas 按 ID 计算分组

pandas calculation grouping by ID

是否可以通过 ID 将计算应用于 DF。 例如,如果多个记录共享一个相似的 ID,则进行该计算但在整个 DF 中进行?

df['Total Volume'] = df.groupby('ID')[df['VOLUME'].shift(-1) + df['ADDED'] - df['VOLUME']]

所以我想使用计算创建列“总体积”

df['VOLUME'].shift(-1) + df['ADDED'] - df['VOLUME']

我在这个逻辑上取得了一些成功:

df['Total Volume'] = df['VOLUME'].shift(-1) + df['ADDED'] - df['VOLUME']

但它不考虑 ID,第一条记录总是来自另一个 ID 的总和。

最终,对于每个新 ID 的第一条记录,该列应该为空白或空。

IIUC,你想限制每个“ID”的计算,对吧?然后你可以在“VOLUME”上使用 groupby + shift 并做其他所有相同的事情。

df['TOTAL VOLUME'] = df.groupby('ID')['VOLUME'].shift(-1) + df['ADDED'] - df['VOLUME']

注意shift(-1)将下一条记录向上移动,所以最终结果是每个“ID”中的最后一条记录为空。既然你说:

Ultimately the column should be blank or empty for the first record with every new ID

我想你想要 shift(1)(默认情况下是 1):

df['TOTAL VOLUME'] = df.groupby('ID')['VOLUME'].shift() + df['ADDED'] - df['VOLUME']

然后,上面的代码可以使用 groupby + diff:

写得更简单
df['TOTAL VOLUME'] = df['ADDED'] - df.groupby('ID')['VOLUME'].diff()