将相邻行附加到熊猫中的选定行

时间:2018-10-10 13:54:11

标签: python pandas dataframe

我要从每个唯一的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

1 个答案:

答案 0 :(得分:4)

boolean indexing中的groupbyshift中的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