python-3.x - Pandas 窗口聚合两个排序表

标签 python-3.x pandas dataframe

例如,我有两张表

表 A 包含字段 A、B(按 A 计数排序): A、B

<表类=“s-表”> <标题> A 列 B 列 <正文> foo1 一个 foo2 b foo3 一个 foo4 d foo5 c foo6 一个

表 B(按 B 数量排序):

<表类=“s-表”> <标题> B 列 <正文> 一个 b c d e

我想要一个像这样的表格(为每个 B 获取前 2 个最受欢迎的 A):

<表类=“s-表”> <标题> A 列 B 列 <正文> foo1 一个 foo3 一个 foo2 b foo4 d foo5 c

我尝试进行聚合和分组,但我不知道如何创建它。

最佳答案

IIUC 使用订购 Categorical ,然后按此列排序并按 GroupBy.head 获取 top2 值:

df['Column B'] = pd.Categorical(df['Column B'], 
                                ordered=True, 
                                categories=df['Column B'].unique())

如果需要使用另一个DataFrame的顺序,请使用categories=df2['Column B']:

df['Column B'] = pd.Categorical(df['Column B'], 
                                ordered=True, 
                                categories=df2['Column B'])

df = df.sort_values('Column B').groupby('Column B').head(2)
print (df)
  Column A Column B
0     foo1        a
2     foo3        a
1     foo2        b
3     foo4        d
4     foo5        c

关于python-3.x - Pandas 窗口聚合两个排序表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74654693/

相关文章:

python - 如果 xmlcharrefreplace 和 backslashreplace 不起作用,我应该如何解码字节(使用 ASCII)而不丢失任何 "junk"字节?

Python 3 破坏了 pandas 的渐变风格, 'SingleBlockManager' 是原因

python - 根据其他列中唯一值的长度在 Pandas 中创建一个新列

python - 根据特定索引对多索引 pandas 数据框进行排序

r - 在 R 中将数字转换为逻辑数据帧

Python 导入 - 解释

python - 雷达图 matplotlib - yticks 的位置

python - 对多索引数据库文件求和

python - 附加到 DataFrame 会转换数据类型

python - 根据条件将 NaN 值替换为其他列的平均值