Python 基于变量值查找数据帧中的最大值
我有一个如下形式的数据框:Python 基于变量值查找数据帧中的最大值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个如下形式的数据框: A| B| C | D a| x| r | 1 a| x| s | 2 a| y| r | 1 b| w| t | 4 b| z| v | 2 我希望能够返回如下内容(显示唯一值和频率) 目前,我可以快速计算结果数据帧的3列以外的所有内容 df = (df.groupby('A', sort=False)['B'] .apply(lambda x: x.value_counts().head(1)) .reset_index() 但是为了计算2列(
A| B| C | D
a| x| r | 1
a| x| s | 2
a| y| r | 1
b| w| t | 4
b| z| v | 2
我希望能够返回如下内容(显示唯一值和频率)
目前,我可以快速计算结果数据帧的3列以外的所有内容
df = (df.groupby('A', sort=False)['B']
.apply(lambda x: x.value_counts().head(1))
.reset_index()
但是为了计算2列(“根据B列中最常见的值计算D列的最大值”),我写了一个for循环,它对于很多数据来说都很慢。
有捷径吗
该问题链接到:使用“按最大值获取行数”D
按以下方式分组:
考虑分3个步骤执行此操作:
df2=(df.groupby('A',sort=False)['B'])。应用(lambda x:x.value_counts().head(1))。重置_index()
df3=df.groupby(['A','B']).agg({'D':max}).reset_index()
df2.merge(df3,左上=['A','level\u 1'],右上=['A','B'])
结果数据框中的D列将是您所需要的
A level_1 B_x B_y D
0 a x 2 x 2
1 b w 1 w 4
在loc()中很好地使用了idxmax()。我喜欢这个解决方案!
df1 = (df.groupby('A', sort=False)['B']
.apply(lambda x: x.value_counts().head(1))
.reset_index()
.rename(columns={'level_1':'E'}))
#print (df1)
df = df1.merge(df, left_on=['A','E'], right_on=['A','B'], suffixes=('','_'))
df = df.loc[df.groupby('A')['D'].idxmax(), ['A','B','D','E']]
print (df)
A B D E
1 a 2 2 x
2 b 1 4 w
A level_1 B_x B_y D
0 a x 2 x 2
1 b w 1 w 4