簡體   English   中英

根據列值保留數據框行的百分比

[英]Keep percentage of rows of dataframe based on column value

假設我有一個這樣的數據框:

import pandas as pd
df = pd.DataFrame({'id':['A','A', 'A', 'B','B'], 'value':[2, 4, 6, 3, 4]})

我只想過濾id = A並保留 x 具有id = A的行的百分比。

例如,如果 x=60% 那么數據框應該是這樣的:

  col1  col2
0    A     2
1    A     4
2    B     3
2    B     4

我怎樣才能在pandas有效地做到這一點?

只是為了澄清沒有必要所有id =A 行都是一個接一個。

一種方法是將iloc[]pd.concat一起pd.concat

x = 0.6
cond = df['id'].eq('A')
out = pd.concat((df[cond].iloc[:int(round(df['id'].eq('A').sum() * x))],
                 df[~cond]),sort=False).sort_index()

  id  value
0  A      2
1  A      4
3  B      3
4  B      4

您可以使用df.sample輕松實現

ids = ['A']
frac = 0.6
df.groupby('id', group_keys=False).apply(lambda x: x.sample(frac=frac) 
                                                   if x.name in ids else x)

出去:

    id  value
1   A   4
0   A   2
3   B   3
4   B   4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM