【问题标题】:Identifying/dropping duplicates in 2 columns based on groupby based on multiple-columns基于多列的groupby识别/删除2列中的重复项
【发布时间】:2018-08-13 16:17:51
【问题描述】:

希望首先识别,然后根据 2 列中的行中的相同值删除重复项。但需要注意的是,我首先要根据其他列进行分组。请帮忙!

这是一个示例数据:

   studentid   subj   topic  lesson  testtime    responsetime
1  1           math   add    a       timestamp1  45sec
2  1           math   add    a       timestamp1  45sec
2  1           math   add    a       timestamp2  30sec
2  1           math   add    a       timestamp3  15sec
2  1           math   add    b       timestamp1  0sec
2  1           math   add    b       timestamp1  0sec
2  1           math   add    b       timestamp1  45sec
2  1           math   add    b       timestamp1  45sec

我希望能够首先查看哪些是重复项,以在按

分组时识别['testtime','responsetime'] 中的任何重复模式
df.groupby(['studentid','subj','topic','lesson').

然后可以放下它们。 在使用 groupby 方法时,我找不到任何有关如何检查然后删除重复项的文档。请帮忙!

【问题讨论】:

  • 我应该补充一点,实际的 df 更大,所以我需要指定我只想关注测试时间和响应时间,因为我正在寻找和检查重复的 2 列。

标签: python pandas dataframe group-by duplicates


【解决方案1】:

你能做到吗

df.drop_duplicates().groupby(['studentid','subj','topic','lesson')

【讨论】:

  • 我试过df_duplicates = df.drop_duplicates(['testtime','responsetime'],keep='first').groupby([''studentid','subj','topic','lesson])....但我的问题是这个? drop_duplicates(['testtime','responsetime'],keep='first') 是否检查 testtime 在行索引 1 和 2 之间是否具有相同的值以及 responsetime 在行索引 1 和 2 之间是否具有相同的值?仅当多行之间的两个列值相同时,我只想保留其中一个值。
  • 如果您确实删除了带有 ['testtime', 'responsetime'] 子集的重复项,那么它将把具有相同测试时间和响应时间的任何行视为重复项,并将被删除。它只会保留它的第一个实例。这也将删除具有不同学生 ID 的任何内容,因为您仅将两列定义为子集来确定重复项。考虑到您想根据其他列进行分组,这可能不适合您的情况
  • 我没有工作.. df 的形状没有改变。
  • 您期望 df 的形状是什么?您希望删除哪些列?
  • 不应该从数据框中删除具有重复“testtime”和“responsetime”的行吗?
猜你喜欢
  • 2021-11-03
  • 2018-12-27
  • 2016-04-26
  • 2018-04-22
  • 2016-12-02
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多