我想只选择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%的部分。
答案 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