Python Pandas:在满足条件之前索引2行

时间:2018-04-23 20:10:41

标签: python pandas dataframe

我在下面有以下数据框:

Rec  Channel  Value1  Value2 
Pre             10      20
Pre             35      42
Event    A      23      39
FF              50      75
Post     A      79      11
Post     B      88      69

使用以下代码:

idxall = df[df['Chan'].isin({'A', 'B'})]
for i in range(len(idxall)):
print(idxall.iloc[[i]]) 

目前这给我输出:

Rec  Channel  Value1  Value2 
Event    A      23      39
Post     A      79      11
Post     B      88      69

但是,我希望每次Channel列检测到' A'时,输出都会将所有实例拉到2行以上。或者' B'。

期望的输出:

Rec  Channel  Value1  Value2
Pre             10      20
Event    A      23      39
FF              50      75

有人可以据此提出建议吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

idx = df.loc[df.Channel.isin(['A', 'B'])].index

new_df = df.iloc[idx - 2]

>>> new_df
     Rec Channel  Value1  Value2
0    Pre              10      20
2  Event       A      23      39
3     FF              50      75
上面代码中的

说明 idxChannel列为AB的索引。 df.iloc[idx - 2]只选择在这些索引上方找到2行的行。

请注意,只要您的df索引是连续计数,即df.index返回类似:RangeIndex(start=0, stop=6, step=1)的内容,此功能就会有效。如果不是这种情况,请首先使用df.reset_index(drop=True, inplace = True)

重置索引以满足该条件

编辑:根据您的评论,您似乎只想打印行,而不是根据行创建新的数据框。在这种情况下,您可以使用基本循环格式:

idx = df.loc[df.Channel.isin(['A', 'B'])].index

for i in idx:
    print(df.iloc[[i - 2]])