Gio*_*oni 6 python group-by dataframe pandas pandas-groupby
简单数据框:
df = pd.DataFrame({'A': [1,1,2,2], 'B': [0,1,2,3], 'C': ['a','b','c','d']})
df
A B C
0 1 0 a
1 1 1 b
2 2 2 c
3 2 3 d
Run Code Online (Sandbox Code Playgroud)
我希望groupbyA 列的每个值 ( ) 都得到 C 列的值,B 列的值最大。例如对于A列的第1组,B列的最大值为1,所以我想要C列的值“b”:
A C
0 1 b
1 2 d
Run Code Online (Sandbox Code Playgroud)
无需假设 B 列已排序,性能是重中之重,其次是优雅。
用sort_values+检查drop_duplicates
df.sort_values('B').drop_duplicates(['A'],keep='last')
Out[127]:
A B C
1 1 1 b
3 2 3 d
Run Code Online (Sandbox Code Playgroud)
df.groupby('A').apply(lambda x: x.loc[x['B'].idxmax(), 'C'])
# A
#1 b
#2 d
Run Code Online (Sandbox Code Playgroud)
使用idxmax找到其中索引B是最大的,然后选择列C该组内(使用λ-功能
这里有一点关于groupbyand的乐趣nlargest:
(df.set_index('C')
.groupby('A')['B']
.nlargest(1)
.index
.to_frame()
.reset_index(drop=True))
A C
0 1 b
1 2 d
Run Code Online (Sandbox Code Playgroud)
或者,sort_values,groupby, 和last:
df.sort_values('B').groupby('A')['C'].last().reset_index()
A C
0 1 b
1 2 d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3245 次 |
| 最近记录: |