我要从每个唯一的df.Rate.unique()
中选择df.ID
= A12
加上下面的行。
这是我的女友。
d = {'ID':['A13', 'A13', 'A12', 'A12','A14', 'A14','A11', 'A12', 'A16', 'A17', 'A12', 'A12'],
'A':[1.1,1.4,1.2, 1.6, 1.1, 1.8,1.1, 1.0, 1.9, 2.2, 3.2, 1.4],
'B':[2.4,2.3,2.7, 1.8, 7.5, 3.5,2.7, 2.3, 2.5, 5.4, 1.4, 9.4],
'Rate':[0.215333,0.215333,0.215333,0.215333,0.822504,0.822504,0.822504,0.822504,1.538575,1.538575,1.538575,1.538575]}
df = pd.DataFrame(data=d)
df1 = df[df.ID.str.contains('A12')==True]
但是我希望先前ID的最后一行包含在df1中。
所需的输出
A B ID
0 1.4 2.3 A13
1 1.2 2.7 A12
2 1.6 1.8 A12
3 1.1 2.7 A11
4 1.0 2.3 A12
5 2.2 5.4 A17
6 3.2 1.4 A12
7 1.4 9.4 A12
答案 0 :(得分:4)
将boolean indexing
中的groupby
与shift
中的Series
一起使用,替换丢失的值,并按位OR
(|
)替换原始掩码:
mask = df.ID.str.contains('A12')
df = df[mask.groupby(df['Rate']).shift(-1).fillna(False) | mask]
print (df)
ID A B Rate
1 A13 1.4 2.3 0.215333
2 A12 1.2 2.7 0.215333
3 A12 1.6 1.8 0.215333
6 A11 1.1 2.7 0.822504
7 A12 1.0 2.3 0.822504
9 A17 2.2 5.4 1.538575
10 A12 3.2 1.4 1.538575
11 A12 1.4 9.4 1.538575