您能否建议我过滤user_id = 101的前三个注释,其label = 1,而不触及label = 0的注释。我也需要保留订单。感谢您的帮助。
import numpy as np
import pandas as pd
data = np.array([['user_id','comment','label'],
[100,'First comment',0],
[101,'Buy viagra',1],
[102,'Second comment',0],
[101,'Third comment',0],
[103,'Fourth comment',0],
[101,'Buy drugs',1],
[104,'Fifth comment',0],
[101,'Buy icecream',1],
[105,'Sixth comment',0],
[101,'Buy something',1]])
df = pd.DataFrame(data=data[1:,0:],columns = data[0,0:])
我正在寻找以下输出:
0 100 First comment 0
1 101 Buy viagra 1
2 102 Second comment 0
3 101 Third comment 0
4 103 Fourth comment 0
5 101 Buy drugs 1
6 104 Fifth comment 0
7 101 Buy icecream 1
8 105 Sixth comment 0
我尝试通过
获取user_id = 101的前三个注释 q = df.groupby('user_id').head(3)
但显然这只是前3条评论而不管标签是什么,并给我一个不正确的结果。
答案 0 :(得分:1)
创建一个布尔掩码,并使用布尔索引/ loc
/ isin
/ query
/ eval
进行相应的过滤。
m = m = df.user_id.eq('101') & df.label.eq('1')
i = df[m].head(3)
j = df[~m]
df = pd.concat([i, j]).sort_index()
df
user_id comment label
0 100 First comment 0
1 101 Buy viagra 1
2 102 Second comment 0
3 101 Third comment 0
4 103 Fourth comment 0
5 101 Buy drugs 1
6 104 Fifth comment 0
7 101 Buy icecream 1
8 105 Sixth comment 0
此过滤过程的优点是您保留索引,因此后续的sort_index
调用会在您将两个部分连接在一起后修复排序。