gpt4 book ai didi

python - 通过从数据帧中的多列进行条件选择进行向量算术

转载 作者:行者123 更新时间:2023-12-01 00:41:34 24 4
gpt4 key购买 nike

我正在尝试在数据框中的不同单元格之间进行算术运算,但无法弄清楚如何对每个组进行操作。我试图找出每个建筑物的基准建筑物(在本例中 upgrade_name == b 是基准情况)和每次升级之间的 energy_use 差异。我有任意数量的 building_id 和任意数量的 upgrade_name

我可以对单个 building_id 成功执行此操作。现在我需要将其扩展为完整的数据集,但我陷入了困境。我将拥有数十个或数千个建筑物,并且每个建筑物都有数十个升级。

这个问题的答案Iterating within groups in Pandas可能相关,但我不确定如何将其应用于我的问题。

我有一个像这样的数据框:

df = pd.DataFrame({'building_id': [1,2,1,2,1], 'upgrade_name': ['a', 'a', 'b', 'b', 'c'], 'energy_use': [100.4, 150.8, 145.1, 136.7, 120.3]})
In [4]: df
Out[4]:
building_id upgrade_name energy_use
0 1 a 100.4
1 2 a 150.8
2 1 b 145.1
3 2 b 136.7
4 1 c 120.3

对于单个building_id,我有以下代码:

upgrades = df.loc[df.building_id == 1, ['upgrade_name', 'energy_use']]
starting_point = upgrades.loc[upgrades.upgrade_name == 'b', 'energy_use']
upgrades['diff'] = upgrades.energy_use - starting_point.values[0]
In [8]: upgrades
Out[8]:
upgrade_name energy_use diff
0 a 100.4 -44.7
2 b 145.1 0.0
4 c 120.3 -24.8

如何为任意数量的building_id 编写此代码,而不是硬编码的building_id == 1?理想的解决方案如下所示(基线差异是否 0NaN 并不重要):

In [17]: df
Out[17]:
building_id upgrade_name energy_use ideal
0 1 a 100.4 -44.7
1 2 a 150.8 14.1
2 1 b 145.1 0.0
3 2 b 136.7 0.0
4 1 c 120.3 -24.8

最佳答案

定义计算能源使用差异的函数(例如当前建筑物的一组行)如下:

def euDiff(grp):
euBase = grp[grp.upgrade_name == 'b'].energy_use.values[0]
return grp.energy_use - euBase

然后计算差异(对于所有建筑物),并将其应用于每个组:

df['ideal'] = df.groupby('building_id').apply(euDiff)\
.reset_index(level=0, drop=True)

结果正如你所料。

关于python - 通过从数据帧中的多列进行条件选择进行向量算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311875/

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