数据框[pandas]

时间:2018-06-28 12:44:05

标签: python pandas

我有一个尾巴很长的数据集,希望只对90%的数据进行采样。

city          score
bangkok       60
kl            20
sydney        10
melbourne     5
dhaka         5

应为:

city          score
bangkok       60
kl            20
sydney        10

2 个答案:

答案 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