我已经使用series
函数和groupby
创建了一个熊猫value_counts()
。我想选择一个具有多个值的行。
Input:
Name Value
A 201
B 219
B 219
C 704
D 222
D 219
ex = ex.groupby("Value")
ex = ex["Name"].value_counts()
Output:
Value Name
201 A 3
219 B 2
D 1
704 C 1
222 D 1
我要选择value
219
,其中有多个Name
B
和D
。
答案 0 :(得分:0)
我认为两栏都需要DataFrame.duplicated
:
df = df[df.duplicated(['Name','Value'], keep=False)]
print (df)
Name Value
1 B 219
2 B 219
但是如果需要输出计数值,请按级别Value
进行过滤:
s = df.groupby("Value")["Name"].value_counts()
print (s)
df1 = s[s.index.get_level_values('Value').duplicated(keep=False)].reset_index(name='count')
print (df1)
Value Name count
0 219 B 2
1 219 D 1
另一种解决方案是首先由reset_index
创建DataFrame
:
df2 = df.groupby("Value")["Name"].value_counts().reset_index(name='count')
print (df2)
Value Name count
0 201 A 1
1 219 B 2
2 219 D 1
3 222 D 1
4 704 C 1
df1 = df2[df2['Value'].duplicated(keep=False)]
print (df1)
Value Name count
1 219 B 2
2 219 D 1
答案 1 :(得分:-1)
不需要额外的groupby
。
您可以将pd.Series.duplicated
与原始数据框一起使用:
res = df[df['Value'].duplicated(keep=False)]
print(res)
Name Value
1 B 219
3 D 219
print(res['Name'].tolist())
['B', 'D']