【问题标题】:Rolling Conditional Pandas DataFrame Column滚动条件 Pandas DataFrame 列
【发布时间】:2018-12-17 06:52:55
【问题描述】:

如何在 pandas 中编写滚动条件应用于列?

import pandas as pd
import numpy as np    

lst = np.random.random_integers(low = -10, high = 10, size = 10)
lst2 = np.random.random_integers(low = -10, high = 10, size = 10)

#lst = [ -2  10 -10  -6   4   2  -5   4   9   3]
#lst2 = [-7  5  6 -4  7  1 -4 -6 -1 -4]
df = pandas.DataFrame({'a' : lst, 'b' : lst2})

给定一个数据框,即“df”,我想创建一个“C”列,这样如果 a > 0 和 b > 0 中的元素将显示 True,如果 a

对于不满足这个条件的行,我想将上一行的条目滚动到当前行(即如果上一行的值为'True'但不满足指定的条件,它的值应该是 'True'。)

我该怎么做?

后续问题:如果条件 a > 1 且 b > 1 返回 True 或 a

【问题讨论】:

    标签: python pandas dataframe data-science


    【解决方案1】:

    我更喜欢在符号上添加一点数学知识。

    i = np.sign(df.a)
    j = np.sign(df.b)
    
    i = i.mask(i != j).ffill()
    i >= 0
    
    # for your `lst` and `lst2` input 
    0    False
    1     True
    2     True
    3    False
    4     True
    5     True
    6    False
    7    False
    8    False
    9    False
    Name: a, dtype: bool
    

    只要您不必担心整数溢出,就可以了。

    【讨论】:

    • 这适用于不满足条件的第一个条目,但是,当我尝试将其用于整个数据帧时,它并没有重新应用该条件。
    • @ZivLotzky 抱歉...现在试试?
    • 不完全...如果 a > 0 和 b > 0,我想返回 True,如果 a
    • 作为后续问题,对于条件 a > 1 和 b > 1 返回 True 或 a
    • @ZivLotzky 是的,我认为答案会有所不同...您要打开另一个问题吗?
    【解决方案2】:
    i = np.sign(df.a)
    j = np.sign(df.b)
    
    i.mask(i != j).ffill().ge(0)
    

    【讨论】:

    • 是的,这就是我最后想出的……抱歉重试,这个星期一大脑有点慢……刷新你的页面。
    猜你喜欢
    • 2017-08-01
    • 2018-05-03
    • 1970-01-01
    • 2019-01-03
    • 2017-03-01
    • 2022-06-30
    • 2021-04-08
    • 2018-05-05
    • 2017-07-25
    相关资源
    最近更新 更多