python - 按列条件清理数据框

标签 python pandas dataframe data-cleaning

我只想保留具有以下条件的 Dataframe 的行:起始条件为 col1 = 0, col2 = 1 和间隔结束 col1 = 0, col2 = 2

示例数据

import pandas as pd

pd.DataFrame({'id':['id1','id1','id1','id1','id1','id1','id1','id1','id1','id1','id1','id2','id2','id2','id2','id2']
                  ,'col1':[0,1,1,0,1,0,0,1,1,0,0,1,0,0,1,1],'col2':[1,2,2,1,2,2,1,2,2,2,1,2,2,1,2,2]})

这看起来像这样:

    col1 col2 id
0   0   1   id1
1   1   2   id1
2   1   2   id1
3   0   1   id1
4   1   2   id1
5   0   2   id1
6   0   1   id1
7   1   2   id1
8   1   2   id1
9   0   2   id1
10  0   1   id1
11  1   2   id2
12  0   2   id2
13  0   1   id2
14  1   2   id2
15  1   2   id2

输出样本

我们可以意识到在col1,col2中只有0-1,0-2的“ block ”或区间。

   col1 col2 id
3   0   1   id1
4   1   2   id1
5   0   2   id1
6   0   1   id1
7   1   2   id1
8   1   2   id1
9   0   2   id1
10  0   1   id1
11  1   2   id2
12  0   2   id2

结果,第 0、1、2、13、14、15 行被删除,因为它们不在 0-1 、 0-2 间隔内。

最佳答案

通过使用新的 group (使用 df.drop('group',1) 删除它)


设置

df['group']=(df.col1==0)&(df.col2==1)
df['group']=df['group'].cumsum()

选项1

mask=df.groupby('group').apply(lambda x : sum((x.col1==0)&(x.col2==2)))
df.loc[df.group.isin(mask[mask.eq(1)].index)]


Out[363]: 
    col1  col2   id  group
3      0     1  id1      2
4      1     2  id1      2
5      0     2  id1      2
6      0     1  id1      3
7      1     2  id1      3
8      1     2  id1      3
9      0     2  id1      3
10     0     1  id1      4
11     1     2  id2      4
12     0     2  id2      4

Option2 案例提到者
@Bharathshetty

mask=df.groupby('group').last().loc[lambda x : (x.col1==0)&(x.col2==2),].index
df.loc[df.group.isin(mask)]


Out[379]: 
    col1  col2   id  group
3      0     1  id1      2
4      1     2  id1      2
5      0     2  id1      2
6      0     1  id1      3
7      1     2  id1      3
8      1     2  id1      3
9      0     2  id1      3
10     0     1  id1      4
11     1     2  id2      4
12     0     2  id2      4

关于python - 按列条件清理数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46647408/

相关文章:

python - 获取创建时间

python - Numpy:找到两个 3-D 数组之间的欧氏距离

python - Pandas :使用 if-else 填充新列

Python:如何将数据帧中的纬度/经度坐标传递或循环到函数中

r - 如何在 data.frame 中获得由其他列聚合的最常见的多列组合?

python - 你如何在 python 中将 ulaw wav 文件转换为 PCM?

python - 如何在 Sympy 中快速反转幂函数

python - Many-Hot(N-hot)编码 - 快速 Pandas 方法?

python - 将日期(excel 格式)的数字表示形式转换为 python 日期和时间,然后将它们拆分为 pandas 中两个单独的数据框列

python - IndexError : list index out of range. 谁能帮我解决这个Python代码吗?包括 numpy 和 pandas 的概念