首页 > 解决方案 > Groupby,过滤熊猫中特定字符串之间的行

问题描述

我想按 分组df,然后过滤掉列和列test之间的行(我在下面标记了它们)。ASTATIONAENDdf

请注意,字母区分大小写(即,必须是STATION而不是Station)。

df看起来像这样:

     A        B        C       test
0    NaN      NaN    NaN       NaN
1    TEXT     <1     >1        555
2    EXAMPLE  NaN    NaN       NaN
3    tj       XYZ    NaN       NaN
4    NaN      xyz    NaN       NaN
5    Station  NaN    NaN       NaN
6    NaN      NaN    NaN       NaN
7    STATION  NaN    NaN       NaN          * Filter Start 
8    Code1   <1000   >1000     555
9    Code2   <1000   >1000     555
10   END      NaN    NaN       NaN          * Filter End
11   TEXT     NaN    NaN       NaN
0    NaN      NaN    NaN       NaN
1    Station  NaN    NaN       NaN
2    NaN      NaN    NaN       NaN
3    STATION  NaN    NaN       NaN          * Filter Start 
4    Code3   <1000   >1000     666
5    END      NaN    NaN       NaN          * Filter End
     ...

预期输出:

8    Code1   <1000   >1000     555
9    Code2   <1000   >1000     555
4    Code3   <1000   >1000     666

标签: pythonpandasdataframenumpy

解决方案


首先,我并没有真正理解您所说的“分组依据test”是什么意思。输出似乎并没有真正分组。尽管如此,我还是过滤掉了。这里是:

df = pd.DataFrame(x, columns=cols)
df['ind'] = 0
df.loc[df['A'] == 'STATION', 'ind'] = 1
df.loc[df['A'] == 'END', 'ind'] = -1
df['ind'] = df['ind'].cumsum()
df[(df['ind']==1) & (df['A'] != 'STATION')]

推荐阅读