python - 查找数据框中索引的最大值和最新值
问题描述
在下面的数据帧中,我想将u
每个用户的最大值减去u
对应行的最大值t
。所以它应该像 21 (u-max) - 18 (u-value of t-max)。数据框按以下方式分组['user','t']
user t u
1 0.0 -1.14
2.30 2.8
2.37 9.20
2.40 21
2.45 18
2 ... ...
如果t
不是索引的一部分,我会使用类似df.groupby().agg({'u':'max'})
and的东西df.groupby().agg({'t':'max'})
,但既然不是,我不知道如何agg()
使用t
(编辑)
我发现我可以df.reset_index(level=['t'], inplace=True)
用来将 t 更改为一列,但现在我意识到如果我使用
df.groupby(['user']).agg({"t":'max'})
,则相应的u
值将丢失
目标是创建一个包含如下值的新数据框:
user (U_max - U_tmax)
1 3
2 ...
解决方案
让我们首先使用以下代码重新创建一个类似于您的数据框:
import pandas as pd
import numpy as np
cols = ['user', 't', 'u']
df = pd.DataFrame(columns=cols)
size = 10
df['user'] = np.random.randint(1,3, size=size)
df['t'] = np.random.uniform(0.0,3.0, size=size)
df = df.groupby(['user','t']).sum()
df['u'] = np.random.randint(-30,30, size=len(df))
print(df)
输出类似于:
u
user t
1 0.545562 19
0.627296 23
0.945533 -13
1.697278 -18
1.904453 -10
2.008375 5
2.296342 -2
2 0.282291 14
1.461548 -6
2.594966 -19
为了处理这个df,我们需要做的第一件事是重置索引,所以:
df = df.reset_index()
现在我们有所有的列,我们可以使用它们来应用我们的最终groupby()
功能。
我们可以从分组开始user
,这是我们需要的,将u
和指定t
为列,以便我们可以在 lambda 函数中访问它们。
在这个 lambda 函数中,我们将从 的max
值中减去 的值u
和对应u
的max
值t
。
因此, 的最大值u
必须类似于:
x['u'].max()
的u
值应该如下所示max
:t
x['u'][x['t'].idxmax()])
如您所见,我们找到了 的最大值的索引t
,并将其用于切片x['u']
。
这是最终代码:
df = df.reset_index()
df = df.groupby(['user'])['u', 't'].apply(lambda x: (x['u'].max() - x['u'][x['t'].idxmax()]) )
print(df)
最终输出:
user
1 25
2 33
总错误检查:
max
的u
为23user 1
_max
的t
foruser 1
是2.296342
,对应u
的是-2
23 - (-2)
= 25
max
为14u
_user 2
_max
的t
foruser 2
是2.594966
,对应u
的是-19
14 - (-19)
= 33
额外提示:如果您想从 重命名返回的列,请在 groupby 操作之后groupby
使用reset_index()
with :set_index()
df = df.reset_index(name='(U_max - U_tmax)').set_index('user')
它将产生:
(U_max - U_tmax)
user
1 25
2 33
推荐阅读
- d3.js - 使用 d3js 的平行坐标的初始值
- javascript - 上传大文件 (100mb+) 只会使 Chrome 崩溃
- c# - 如何验证文本框不接受电子邮件ID
- android - Microsoft appcenter 并上传 APK,无需在 Ionic 3 应用程序上集成他们的 SDK
- python - 导入pybel后死内核
- java - 在不使用 FileUtils 的情况下在目录 java 中添加新文件之前删除旧文件
- python - 怎么获得
包含与正则表达式匹配的文本
- maven - 如何在关键的 Cloud Foundry 中部署多模块 maven spring boot 项目?
- eclipse-che - 在 Che 内部使用什么 Theia 图像?
- android - 在受管设备上安装应用程序的更新/Beta 更新