【问题标题】:Group boolean values in Pandas DataframePandas Dataframe 中的分组布尔值
【发布时间】:2021-09-08 00:56:22
【问题描述】:

我有一个数据框,其中有一列随机的 True、False 序列:

import pandas as pd
df = pd.DataFrame(data={'A':[True, False, True, True, False, False, True, False, True, False, False]})
df
A
0 True
1 False
2 True
3 True
4 False
5 False
6 True
7 False
8 True
9 False
10 False

我想要这个:(不知道如何用简单的话来解释)

A B
0 True 1
1 False 2
2 True 2
3 True 2
4 False 3
5 False 3
6 True 3
7 False 4
8 True 4
9 False 5
10 False 5

我尝试了以下命令,但没有成功: df[A].shift() df[A].diff() df[A].eq()

非常感谢您的帮助。 马蒂亚斯

【问题讨论】:

  • 您需要说明如何获得列B的输出
  • 您能否向我们提供更多关于 B 列中的值与布尔值之间的关系的信息?
  • 无法理解预期的响应,您的意思是对于每个 True、False 组合,您增加 B 列中的计数?
  • 每次出现False 值时,如果其前身是True,则将B 值加一?

标签: python pandas boolean


【解决方案1】:

IIUC,你可以试试:

df['B'] = (df.A.shift() & ~df.A).cumsum() + 1
# OR df['B'] = (df.A.shift() & ~df.A).cumsum().add(1)

输出:

        A  B
0    True  1
1   False  2
2    True  2
3    True  2
4   False  3
5   False  3
6    True  3
7   False  4
8    True  4
9   False  5
10  False  5

【讨论】:

  • 哇,你们真快。感谢您的解决方案!顺便说一句,~ 运算符做了什么?
  • @MatthiasFoerster 这是一个 not 运算符,用于将 True 变为 False,反之亦然。
【解决方案2】:

diff 的一点逻辑

(~df.A.astype(int).diff().ne(-1)).cumsum()+1
Out[234]: 
0     1
1     2
2     2
3     2
4     3
5     3
6     3
7     4
8     4
9     5
10    5
Name: A, dtype: int32

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2020-10-28
    • 2021-08-03
    • 2015-05-30
    • 2018-11-25
    • 1970-01-01
    • 2015-08-11
    • 2018-03-27
    • 2021-05-17
    相关资源
    最近更新 更多