python - 使用 sort_values + head() 时如何包含匹配值

标签 python pandas dataframe sorting group-by

我有一个df:

       Date Symbol Person
0   2019 Q3      A    Bob
1   2019 Q3      A    Jon
2   2019 Q3      B    Rob
3   2019 Q3      B    Ron
4   2019 Q3      C    Jay
5   2019 Q3      C    Ray
6   2019 Q3      D    Fay
7   2019 Q2      A    Bob
8   2019 Q2      A    Jon
9   2019 Q2      B    Rob
10  2019 Q2      B    Ron
11  2019 Q2      C    Jay
12  2019 Q2      C    Ray
13  2019 Q2      D    Fay
14  2019 Q2      D    Bre
15  2019 Q2      E    Jon
16  2019 Q2      F    Ron

我试图按计数找到每季度前两个 Symbols 。但正如您所看到的,有时对于给定的 Symbols 有两个以上的 Date 具有相同的计数值(例如,符号 AB C 中的 2019 Q3 和符号 0x1045 67915, A, B < em>和 C 中的 D

当我这样做时:

df['Count'] = df.groupby(['Date', 'Symbol'])['Person'].transform('nunique')
df = df[['Date', 'Symbol', 'Count']]
df.drop_duplicates(subset=None, keep="first", inplace=True)
df = df.sort_values('Count', ascending=False).groupby('Date').head(2).sort_index()

我的输出仅包括前两个:

   Date Symbol  Count
2019 Q3      A      2
2019 Q3      B      2
2019 Q2      A      2
2019 Q2      B      2

但是我怎样才能得到它,以便所有绑定(bind)的 2019 Q2 实例也被包含在内,这样它看起来像:

   Date Symbol  Count
2019 Q3      A      2
2019 Q3      B      2
2019 Q3      C      2
2019 Q2      A      2
2019 Q2      B      2
2019 Q2      C      2
2019 Q2      D      2

最佳答案

我们可以GroupBy并获取nunique(无需转换),并过滤Count较大的位置或等于 Count 列中的第二个值:

df.sort_values(['Date', 'Symbol'], inplace=True)
g = df.groupby(['Date', 'Symbol']).Person.nunique().rename('Count')
g[g >= g.groupby(level=0).transform('nth', 1)].reset_index()

    Date    Symbol  Count
0  2019Q2      A      2
1  2019Q2      B      2
2  2019Q2      C      2
3  2019Q2      D      2
4  2019Q3      A      2
5  2019Q3      B      2
6  2019Q3      C      2

这是有效的,因为数据已排序,选择大于或等于 Count 列中第二个值的所有值将确保我们始终包含以下任一值:

  • 两个最高计数(如果第二个计数不同)
  • 在第二个与第一个相同的情况下,所有计数都等于第一个

关于python - 使用 sort_values + head() 时如何包含匹配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60152298/

相关文章:

python - 通过 pandas 中的数据框描绘两次

python - 在python中使用两个数据集之间的fuzzywuzzy匹配创建标志

python - 如何将数字添加到基于另一列的列? (字典)

python - 如何将信息从一个 excel 复制到模板 excel?

python - Tar 无法通过 cronjob 工作

Python 和 scikit 学习 : replace matrix vector product during training with custom call

python - 是否有内置或更多 Pythonic 方式来尝试将字符串解析为整数

python - 计算两个 Pandas DataFrame 中列之间的分数差异

python - 为 pandas 数据框中的单元格赋值

python - CSR 矩阵中元素的总和