我有一个以下形式的数据框:
A| B| C | D
a| x| r | 1
a| x| s | 2
a| y| r | 1
b| w| t | 4
b| z| v | 2
我希望能够返回类似的内容(显示唯一值和频率)
A| freq of most common value in Column B |maximum of column D based on the most common value in Column B | most common value in Column B
a 2 2 x
b 1 4 w
目前我可以通过
快速计算除结果数据帧的第 3 列之外的所有内容df = (df.groupby('A', sort=False)['B']
.apply(lambda x: x.value_counts().head(1))
.reset_index()
但是为了计算第 2 列(“基于 B 列中最常见的值的 D 列的最大值”),我编写了一个 for 循环,对于大量数据来说速度很慢。 有没有快速的方法?
最佳答案
使用merge
获取每组最大 D
行数 DataFrameGroupBy.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
关于python - 根据变量值查找数据框中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59663777/