cco*_*929 5 python group-by pandas
以下代码对每个类别的“时间”最大值进行分组。我想获得“目标”变量中的相应值,但我不知道如何去做。任何提示?
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)
Run Code Online (Sandbox Code Playgroud)
我们可以使用loc+ groupby idxmax:
res = df.loc[
df.groupby('categ')['time'].idxmax(),
['time', 'target']
].sort_values('time')['target']
Run Code Online (Sandbox Code Playgroud)
res:
6 3
1 1
5 10
2 4
Name: target, dtype: int64
Run Code Online (Sandbox Code Playgroud)
或者groupby transform如果需要与组最大值匹配的所有行,则使用 max 进行过滤:
res = df.loc[
df.groupby('categ')['time'].transform('max').eq(df['time']),
['time', 'target']
].sort_values('time')['target']
Run Code Online (Sandbox Code Playgroud)
res:
6 3
1 1
5 10
2 4
Name: target, dtype: int64
Run Code Online (Sandbox Code Playgroud)
*在这种情况下,输出是相同的,但如果每个 都有重复的最大值,则输出不会相同categ。
groupby agg根据评论并time汇总到列表中:
res = df.groupby('time')['target'].agg(list)
Run Code Online (Sandbox Code Playgroud)
res:
time
0 [3]
1 [2, 9, 8]
2 [1, 10]
3 [4]
Name: target, dtype: object
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |