python - 根据变量值查找数据框中的最大值

标签 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

我希望能够返回类似的内容(显示唯一值和频率)

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 循环,对于大量数据来说速度很慢。 有没有快速的方法?

问题链接至:Count values in dataframe based on entry

最佳答案

使用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/

相关文章:

python-3.x - Pandas :按重复的列值对行进行分组,保持组中每列的最大绝对值

python - 如何插入字段中带有字符[']的表(pymssql)

python - 从另一个数据帧映射后如何在列中查找值的总和?

python - 将 DateTimeIndex 的时间元素分配给新列

Python Pandas : Apply Multi-Line Boolean Criteria Within Group?

python - 从组内的最大值中减去值

python - 自定义用户和表单的实现

javascript - Selenium Python 绑定(bind) : how to execute JavaScript on an element?

python - 如何在 Python 中使用正则表达式非捕获组格式

python - 如何从值列表中将新列附加到 pandas groupby 对象