以下代码对每个类别的“时间”最大值进行分组。
我想获得“目标”变量中的相应值,但我不知道如何去做。
任何提示?
import numpy as np
import pandas as pd
data=[[1,1,2,2,'A'],
[2,5,5,1,'A'],
[3,7,9,4,'B'],
[1,5,1,9,'B'],
[1,8,2,8,'C'],
[2,8,5,10,'C'],
[0,1,2,3,'D']]
df=pd.DataFrame(data, columns=['time','x','y','target','categ'])
res = ((df.groupby('categ')['time'].max().value_counts(ascending=True).sort_index()))
print(res)
最佳答案
我们可以使用 loc
+ groupby idxmax
:
res = df.loc[
df.groupby('categ')['time'].idxmax(),
['time', 'target']
].sort_values('time')['target']
res
:6 3
1 1
5 10
2 4
Name: target, dtype: int64
或者用
groupby transform
过滤max 如果需要匹配组最大值的所有行:res = df.loc[
df.groupby('categ')['time'].transform('max').eq(df['time']),
['time', 'target']
].sort_values('time')['target']
res
:6 3
1 1
5 10
2 4
Name: target, dtype: int64
*在这种情况下,输出是相同的,但如果每个 categ
有重复的最大值,则输出不会相同。 .根据
groupby agg
的评论在 time
并汇总到列表中:res = df.groupby('time')['target'].agg(list)
res
:time
0 [3]
1 [2, 9, 8]
2 [1, 10]
3 [4]
Name: target, dtype: object
关于python - 从 groupby 2 列之后的第 3 列获取相应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68505255/