Pandas DataFrame索引属于一个集合

时间:2015-07-08 10:02:59

标签: python indexing pandas

我有一个Pandas DataFrame,在列中有一个叫做Phone_Number。我想得到的电话号码显示50次或更多的行。我最好的尝试是:

counts = data.Phone_Number.value_counts()
counts = counts[counts.values > 50]
data[data.Phone_Number in counts.index]

然而,我得到了这个错误:TypeError:'Series'对象是可变的,因此它们不能被散列

在这种情况下获取数据框中行的最佳方法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:2)

上述方法可以解决您的问题实例。一般来说,如果你想通过属于一个集合索引一个pandas数据帧,你可以像这样使用isin:

counts = data.Phone_Number.value_counts()
counts = counts[counts.values > 50]
data[data.Phone_Number.isin(counts.index)]

答案 1 :(得分:0)

您可以将groupbyfilter一起使用。

import pandas as pd
import numpy as np

# generate some artificial data
# ===================================================
np.random.seed(0)
# 450 rows/records in total
df = pd.DataFrame(np.random.randint(1, 10, 450), columns=['Phone_Number'])

Out[74]: 
 Phone_Number
0               6
1               1
2               4
3               4
4               8
5               4
6               6
7               3
..            ...
442             7
443             1
444             9
445             1
446             8
447             7
448             6
449             7

[450 rows x 1 columns]

# processing
# ===================================================

# filtered results: 177 rows
df.groupby('Phone_Number').filter(lambda group: group.count() > 50)

Out[75]: 
     Phone_Number
2               4
3               4
5               4
8               5
11              9
12              9
17              9
20              9
..            ...
424             5
426             4
428             5
430             5
431             5
436             4
441             4
444             9

[177 rows x 1 columns]

# for reference: 71+54+52 = 177
df.Phone_Number.value_counts()

Out[76]: 
4    71
9    54
5    52
1    50
8    49
3    45
6    44
2    43
7    42
dtype: int64