![](/img/trans.png)
[英]Filter pandas dataframe based on a column: keep all rows if a value is that column
[英]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.