【问题标题】:Pandas: how to get only values of columns that value_counts() equals NPandas:如何仅获取 value_counts() 等于 N 的列的值
【发布时间】:2022-10-14 18:09:51
【问题描述】:
我有一个数据框:
df =
a b c d e
0 0 1 2 3 4
1 1 2 3 0 4
2 2 3 1 4 0
我想获得在某一列中出现 N 次的值。
例如,如果我想获得在“e”列中出现 2 次的所有值,我会得到result = [4],如果我想获得在“d”列中出现 1 次的所有值,我会获取result = [3,0,4]。
我可以做df['e'].value_counts() == 2,但这给出了一个真/假系列。我只想获得“真”中的值。
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
您可以在Series.value_counts 之后过滤@987654322@ 值:
s = df['e'].value_counts()
L = s.index[s.eq(2)].tolist()
print (L)
[4]
s = df['d'].value_counts()
L = s.index[s.eq(1)].tolist()
print (L)
[0, 4, 3]
【解决方案2】:
您所做的会返回 True/False 系列,因此我们需要使用它来获取索引值!
col = 'd'
n = 1
df[col].value_counts() == n
# 3 True
# 0 True
# 4 True
# Name: d, dtype: bool
要获取后面有True 的索引,我们可以这样做:
df[col].value_counts().index[df[col].value_counts() == n]
# Int64Index([3, 0, 4], dtype='int64')
要创建一个列表,我们只需要使用list():
list(df[col].value_counts().index[df[col].value_counts() == n])
# [3, 0, 4]