我有一个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'对象是可变的,因此它们不能被散列
在这种情况下获取数据框中行的最佳方法是什么?
非常感谢!
答案 0 :(得分:2)
上述方法可以解决您的问题实例。一般来说,如果你想通过属于一个集合索引一个pandas数据帧,你可以像这样使用isin:
counts = data.Phone_Number.value_counts()
counts = counts[counts.values > 50]
data[data.Phone_Number.isin(counts.index)]
答案 1 :(得分:0)
您可以将groupby
与filter
一起使用。
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