Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查数据帧中不同行之间的值更改并在新列中表示它?_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 如何检查数据帧中不同行之间的值更改并在新列中表示它?

Python 如何检查数据帧中不同行之间的值更改并在新列中表示它?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,各位 我不熟悉python和pandas,我遇到了一个问题,我需要检查某个列的值是否随时间变化(不同的行)。我完全不知道如何解决这个问题 我创建了一个简单的示例来清楚地说明它: df = pd.DataFrame({"Year":[2011,2012,2013,2014,2011,2014,2014,2014,2011,2012,2012,2015],"Product":['A','A','A','A','B','B','B','B','C','C

各位

我不熟悉python和pandas,我遇到了一个问题,我需要检查某个列的值是否随时间变化(不同的行)。我完全不知道如何解决这个问题

我创建了一个简单的示例来清楚地说明它:

    df = pd.DataFrame({"Year":[2011,2012,2013,2014,2011,2014,2014,2014,2011,2012,2012,2015],"Product":['A','A','A','A','B','B','B','B','C','C','C','C'],"Value1":[1,1,1,0,1,1,0,1,0,1,1,1]},index=['A','A','A','A','B','B','B','B','C','C','C','C'])
df

        Year    Product Value1
A       2011       A    1
A       2012       A    1
A       2013       A    1
A       2014       A    0
B       2011       B    1
B       2014       B    1
B       2014       B    0
B       2014       B    1
C       2011       C    0
C       2012       C    1
C       2012       C    1
C       2015       C    1
我想根据不同的产品检查不同年份的价值变化,以下是要检查的逻辑:

  • 如果一开始某个产品的值1为0,只需删除此行,直到值1变为1。(如2011年的产品C)

  • 如果产品的值1为1,则将结果设置为0。(例如,2011年的产品a等)

  • 如果某一年的值1从1变为0,则将结果设置为1,并在同一年内删除该产品的其他行(例如2014年的产品B)

  • 因此,最终结果应该如下所示:

    df2 = pd.DataFrame({"Year":[2011,2012,2013,2014,2011,2014,2012,2012,2015],"Product":['A','A','A','A','B','B','C','C','C'],"Value1":[1,1,1,0,1,0,1,1,1],'result':[0,0,0,1,0,1,0,0,0]},index=['A','A','A','A','B','B','C','C','C'])
    df2
    
        Year    Product Value1  result
    A   2011       A       1    0
    A   2012       A       1    0
    A   2013       A       1    0
    A   2014       A       0    1
    B   2011       B       1    0
    B   2014       B       0    1
    C   2012       C       1    0
    C   2012       C       1    0
    C   2015       C       1    0
    
    我尝试使用
    pd.apply
    来解决这个问题,但我不知道如何获取另一行值并进行比较以给出一个新值


    有人能帮我吗?

    你的逻辑很复杂,所以我分阶段建立了它

    df['result'] = abs(df['Value1'].diff()).bfill().astype(int)
    
  • 具有第一个值和每年产品计数的临时列
  • 然后,您的核心逻辑是使用
    apply()
    和fact have first
  • 构建一个符合您提供的逻辑的筛选条件
  • 最后筛选到所需的行,并清除删除临时列
  • 输出

       Year Product  Value1  result
    A  2011       A       1       0
    A  2012       A       1       0
    A  2013       A       1       0
    A  2014       A       0       1
    B  2011       B       1       0
    B  2014       B       0       1
    C  2011       C       0       0
    C  2012       C       1       0
    C  2012       C       1       0
    C  2015       C       1       0
    

    productA 2014在2014年是0非常感谢!所提供的答案被标记为低质量职位,以供审查。以下是一些指导原则。这一答案可以从解释中获益。仅代码答案不被视为“好”答案。
       Year Product  Value1  result
    A  2011       A       1       0
    A  2012       A       1       0
    A  2013       A       1       0
    A  2014       A       0       1
    B  2011       B       1       0
    B  2014       B       0       1
    C  2011       C       0       0
    C  2012       C       1       0
    C  2012       C       1       0
    C  2015       C       1       0