【问题标题】:PANDAS : How can I output duplicate values within a group?PANDAS:如何在组内输出重复值?
【发布时间】:2021-10-17 03:31:40
【问题描述】:

我的数据框有一个类别和子类别列,然后是一个包含有时重复的字符串的列。

我的问题是针对每个类别(CAT A),哪些字符串在子类别(CAT B)中重复

CAT A CAT B Strings
A1 B1 String1
A1 B1 String2
A1 B1 String3
A1 B2 String4
A1 B2 String5
A1 B2 String1
A2 B1 String1
A2 B1 String2
A2 B1 String3
A2 B2 String4
A2 B2 String5
A2 B2 String6

我正在寻找的输出

A1
Repeated strings in  B1 and B2
"String1"

---

A2
Repeated strings in  B1 and B2
None

我对如何分组和比较组感到困惑。

谢谢

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以通过duplicated()keep=False 尝试

m=df.duplicated(subset=['CAT A','Strings'],keep=False)
#OR via groupby()+transform()
#m=df.groupby('CAT A')['Strings'].transform(lambda x:x.duplicated(keep=False))

最后:

out=df.loc[m]

out的输出:

   CAT A    CAT B   Strings
0   A1      B1      String1
5   A1      B2      String1

如果需要单独的列:

df.loc[m,'duplicated']=df.loc[m,'Strings']

out的输出

   CAT A CAT B  Strings duplicated
0     A1    B1  String1    String1
1     A1    B1  String2        NaN
2     A1    B1  String3        NaN
3     A1    B2  String4        NaN
4     A1    B2  String5        NaN
5     A1    B2  String1    String1
6     A2    B1  String1        NaN
7     A2    B1  String2        NaN
8     A2    B1  String3        NaN
9     A2    B2  String4        NaN
10    A2    B2  String5        NaN
11    A2    B2  String6        NaN

【讨论】:

  • 当您可以设置子集时,似乎还有很长的路要走:-> m = df.duplicated(subset=['CAT A', 'Strings'], keep=False)
猜你喜欢
  • 1970-01-01
  • 2020-08-24
  • 2021-11-23
  • 1970-01-01
  • 2020-04-23
  • 2022-10-13
  • 2022-11-18
  • 2013-07-16
  • 1970-01-01
相关资源
最近更新 更多