我有一个Pandas数据框:
Server Clock 1 Clock 2 Power diff
0 PhysicalWindows1 3400 3300.0 58.5 100.0
1 PhysicalWindows1 3400 3500.0 63.0 100.0
2 PhysicalWindows1 3400 2900.0 25.0 500.0
3 PhysicalWindows2 3600 3300.0 83.8 300.0
4 PhysicalWindows2 3600 3500.0 65.0 100.0
5 PhysicalWindows2 3600 2900.0 10.0 700.0
6 PhysicalLinux1 2600 NaN NaN NaN
7 PhysicalLinux1 2600 NaN NaN NaN
8 Test 2700 2700.0 30.0 0.0
基本上,我希望平均每台服务器的功耗,但前提是差异最小。例如,如果您查看“PhysicalWindows 1”服务器,我有3行,其中两行的差异为100,一行的差异为500。由于我有两行的差异为100,因此我希望平均58.5和63.0的功耗。对于“PhysicalWindows 2”,因为只有一行具有最小的差异,所以我们返回这一行的幂-65。2如果是NaN,则返回Nan,如果只有一个匹配,则返回这一个匹配的幂。
生成的 Dataframe 如下所示:
Server Clock 1 Power
0 PhysicalWindows1 3400 (58.5+63.0)/2
1 PhysicalWindows2 3600 65.0
2 PhysicalLinux1 2600 NaN
3 Test 2700 30.0
5条答案
按热度按时间ltskdhd11#
将
groupby
与dropna=False
一起使用,以避免删除PhysicalLinux1和sort=True
以排序索引级别(最低差异在顶部),然后删除drop_duplicates
以仅保留(服务器,时钟1)的一个示例:vc9ivgsu2#
以下是使用
df.groupby()
和pd.merge()
的可能解决方案ax6ht2ek3#
使用双
groupby
,第一个groupby.transform
用于屏蔽非最大功率,然后groupby.agg
用于聚合输出:
qyyhg6bp4#
nimxete25#
出局