【问题标题】:Count one-time occurrence values on a column, given another column values给定另一列值,计算一列上的一次性出现值
【发布时间】:2020-12-20 04:34:55
【问题描述】:

所以,我有这样的数据集: df=

Id    Pos        Salary  year
                               
00    Chief      2000    2003
01    Assistant  1800    2003
02    Assistant  1950    2003
03    Analyst    5200    2003
04    Guard      1000    2003
05    Chief      2500    2004
06    Service     800    2003
07    Exec      10000    2005
08    Exec      12000    2005
09    Sales      1100    2007

我被要求计算 2003 年只有一个人持有多少个“Pos”。(对于这个例子,这将是 4 个,因为 pos 'Assistant' 由 2 个人持有)

通过运行

(df.duplicated(subset=['Pos'], keep=False)).sum()

我在不考虑“year”列的情况下获得了单次出现的计数

我试过了

(df.duplicated(subset=['Pos', 'year'], keep=False)).sum()

然后它计算posyears 的单次出现。 (总共 6 个:4 个用于所有年份仅由一个人担任的职位,加上 2 个用于在“年份”中不重复的行)

我相信我需要使用 df.groupby,但我不确定语法。有任何想法吗?提前致谢

【问题讨论】:

  • 使用df.loc[df["year"].eq(2003),"Pos"].drop_duplicates(keep=False).nunique()

标签: python pandas count duplicates dataset


【解决方案1】:

您可以先提取带有year == 2003 的行子集,然后再查找重复项。
此外,您需要在计算总和之前反转结果,因为duplicated 会将重复出现标记为 True,而您需要唯一出现的总和。
试试这个:
(~(df[df.year==2003].duplicated(subset=['Pos'], keep=False))).sum()

【讨论】:

  • ´(~(df[df.year==2003].duplicated(subset=['Pos'], keep=False))).sum()´ 完成了这项工作。虽然我认为"~" 运算符已经反转了 "true" 结果。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2021-04-12
  • 2021-08-26
  • 2020-10-09
  • 1970-01-01
相关资源
最近更新 更多