通过匹配行的一部分来分割数据帧

时间:2017-08-30 10:32:08

标签: python pandas dataframe

我想只选择DF的主要部分。例如,给定

id_B, supportProgress
id1, A
id1, A 
id1, A
id1, A
id1, A
id1, B
id1, B

输出是:

id_B, supportProgress
id1, A
id1, A 
id1, A
id1, A
id1, A

我不能应用简单的过滤器,因为我不知道supportProgress的值是什么。在另一个DF中可以是supportProgress = C,C,C,C,C,D,D,并且我只想选择对应于C,C,C,C,C的部分。

我的想法是做df.groupby(['supportProgress'])并选择覆盖len(df)超过80%的部分。

2 个答案:

答案 0 :(得分:1)

我不知道80%但是为了获得最频繁supportProgress的数据,你可以使用它:

df[df['supportProgress'] == df['supportProgress'].value_counts().index[0]]

答案 1 :(得分:1)

首先需要value_counts

a = df['supportProgress'].value_counts(normalize=True)
print (a)
A    0.714286
B    0.285714
Name: supportProgress, dtype: float64

#get all values by conditions
b = a.index[a > .8]
#if return no value, get all values
b = a.index if b.empty else b
print (b)
Index(['A', 'B'], dtype='object')

#last filter
df = df[df['supportProgress'].isin(b)]
print (df)
  id_B supportProgress
0  id1               A
1  id1               A
2  id1               A
3  id1               A
4  id1               A
5  id1               B
6  id1               B