gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:25:45 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com