繁体   English   中英

如何使用python / pandas消除具有连续值的列的行

how to eliminate rows with continuous values for a column using python/pandas

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在第1列中有一个这样的数据框,其中有连续的零:

col1    col2    col3
  1       2       3
  0       4       5
  0       1       4
  2       7       8
  0       1       2
  4       4       4
  0       1       3
  0       4       2
  0       1       9
  4       6       2

我想跳过至少连续2次连续零的行。

例如,输出将如下所示:

col1    col2    col3
  1       2       3
  2       7       8
  0       1       2
  4       4       4
  4       6       2
1 个回复

采用:

m = df['col1'].ne(0)
s = m.cumsum() * (~m)
df = df[s.groupby(s).transform('size').lt(2) | m]

要么:

df = df[s.map(s.value_counts()).lt(2) | m]

print (df)
   col1  col2  col3
0     1     2     3
3     2     7     8
4     0     1     2
5     4     4     4
9     4     6     2

说明

首先通过Series.ne比较不等于0Series.ne

print (df['col1'].ne(0))
0     True
1    False
2    False
3     True
4    False
5     True
6    False
7    False
8    False
9     True
Name: col1, dtype: bool

然后将cumsum用于组-值为0组具有相同的组:

print (m.cumsum())
0    1
1    1
2    1
3    2
4    2
5    3
6    3
7    3
8    3
9    4
Name: col1, dtype: int32

布尔布尔掩码的倒数的倍数,用于删除非0值:

print (m.cumsum() * (~m))
0    0
1    1
2    1
3    0
4    2
5    0
6    3
7    3
8    3
9    0
Name: col1, dtype: int32

然后通过GroupBy.transform获取组GroupBy.transform

print (s.groupby(s).transform('size'))
0    4
1    2
2    2
3    4
4    1
5    4
6    3
7    3
8    3
9    4
Name: col1, dtype: int64

并按lt <进行比较:

print (s.groupby(s).transform('size').lt(2))
0    False
1    False
2    False
3    False
4     True
5    False
6    False
7    False
8    False
9    False
Name: col1, dtype: bool

由原始蒙版最后的链m by | 对于按位OR

print (s.groupby(s).transform('size').lt(2) | m)
0     True
1    False
2    False
3     True
4     True
5     True
6    False
7    False
8    False
9     True
Name: col1, dtype: bool

最后一个通过boolean indexing过滤器:

print (df[s.groupby(s).transform('size').lt(2) | m])

   col1  col2  col3
0     1     2     3
3     2     7     8
4     0     1     2
5     4     4     4
9     4     6     2
1 使用Python消除列中具有特定值的行

如何删除第5列中值为“ 0”的行? 甚至更好,我们是否可以选择范围(例如,删除第5列的值介于-50和30之间的行)? 数据如下所示: ...

2011-08-09 00:24:58 3 2235   python
3 Pandas:获取连续具有相似值的行

我有一个像这样的数据框.. 我想获取在特定阈值次数内连续具有状态“T”的 ID(在本例中为 2)。 因此,获取的行将是... 我可以想到一个迭代解决方案。 我正在寻找的是更像 Pandas/sql 的东西。 我想通过一个订单id ,然后time跟着一群由第一id ,然后status应该工作 ...

4 检查pandas列是否有连续的行值

我有: 我有一个列表和单个整数,如下所示: 对于主列表中的每个项目,我想查找它第一次出现在列中的索引。 所以对于单个整数(即2)我想知道它第一次出现在hi列中(索引1,但是当它再次出现时我不感兴趣,即索引6) 对于列表中的列表,我想知道列表在该列中按顺序出现的最后一个 ...

5 使用具有反转值的列消除行

我在努力解决这个问题时遇到了很多麻烦。 有人能帮助我吗? 我有一个包含colA和colB的表,这些是每行的值: 在此表中选择时,我想只检索一行,因为值被反转。 如果2意味着1,1意味着2,那么它们是相等的,我不希望两行作为回报。 有没有办法进行SQL查询并获得我想要的结果 ...

6 Python / Pandas:删除具有外围值的行,并保留所有列

我有一个包含许多数值和分类值的数据集,我只想测试数值列上的离群值,并删除基于这些列的行。 我正在这样尝试: 当然,它将删除所有列中的所有离群值,但是由于我具有分类列,因此遇到以下错误: TypeError:+不支持的操作数类型:“ float”和“ str” 我知 ...

7 如何检查pandas列中接下来的3个连续行是否具有相同的值?

我有一个包含 3 列的 Pandas 数据框 - id 、 date和value 。 我想检查每个id有多少行,其中接下来的 3 个或 3 个以上的连续行在value列中具有相同的值? 一旦确定接下来的 3 个或更多连续行具有相同的值,在单独的列中将它们标记为 1,否则为 0。 所以最终的数据 ...

8 如何根据列值消除非连续日期?

我有一个带有日期的数据框,我需要消除非连续值,但是确定连续状态的方法分为两列,如下所示: 对于这种特定情况,预期结果将是 日期(按顺序排列)显示此模式的情况也可能发生: 在这种情况下,由于前两个条目的结束日期均为9999-12-31,因此我们从第三行开始,并立即发现以下情 ...

9 如何使用 Pandas 在 Python 中消除表单提交的重复行?

我有一个表单提交数据集 - 有些表单已提交多次。 同一个人,表单中相同的选择,但submission_ids和提交日期略有不同。 我想删除其中一个提交(我会说第二个,但没关系,因为它们是相同的)。 如果我这样做: 我要么没有得到我想要的(因为 submit_ids 是唯一的),或者如果我对列 ...

10 Python / Pandas:仅当匹配列时才合并连续的行

我有一个庞大的数据集,其中包含在网络中传播的对象的记录。 该数据集存储在pandas数据集中,大致如下所示: 数据帧已按Obj ID排序,属于对象的每个记录块均已按时间(以秒为单位的“ Timestamp字段)进行了排序。 具有相同Obj ID和link ID两个连续行代表该link ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM