我有一个尾巴很长的数据集,希望只对90%的数据进行采样。
city score
bangkok 60
kl 20
sydney 10
melbourne 5
dhaka 5
应为:
city score
bangkok 60
kl 20
sydney 10
答案 0 :(得分:1)
我认为需要按sum
除以计数分数,然后按boolean indexing
进行过滤,最后按sort_values
进行过滤,以便在过滤的行中获得更好的性能:
a = 0.9
df = df[df['score'].div(df['score'].sum()) >= 1 - a].sort_values('score', ascending=False)
或者:
df = df[df['score'].div(df['score'].sum()) >= 0.1].sort_values('score', ascending=False)
print (df)
city score
0 bangkok 60
1 kl 20
2 sydney 10
详细信息:
print (df['score'].div(df['score'].sum()))
0 0.60
1 0.20
2 0.10
3 0.05
4 0.05
Name: score, dtype: float64
答案 1 :(得分:1)
首先,对要过滤的数据中最高90%的值进行排序
df.sort_values('score', ascending=False, inplace=True)
然后,您计算出累加和并除以总数,以得出过滤条件(可以将0.9
替换为自定义限制)
df = df[df['score'].cumsum() / df['score'].sum() < 0.9]
现在df
看起来像
city score
bangkok 60
kl 20
sydney 10