【发布时间】:2019-04-28 16:42:01
【问题描述】:
我想创建一个二进制列,如果数据框中的一列恰好满足逻辑条件 A 并且数据框中的另一列满足逻辑条件 A 或逻辑条件 B,则该列标记为“是”。因此,如果新列只有 1两个单独的列满足上述条件。
每一列是每年的单独产品计数。 条件 A :如果一个产品(即“c1”)在当年卖出了 8 件产品,上一年在 1 到 6 之间以及前一年(2 年前)在 1 到 6 之间,满足条件 A。 条件B:如果任何其他产品(即不是“c1”说“c3”)满足上述条件A或当年销售8个,上一年销售8个,两年前销售8个,则满足条件B。 因此,如果特定年份中的任意 2 列满足上述条件,则 Success 只能为 1。一列必须满足条件 A,另一列必须满足条件 B。
import numpy as np
import pandas as pd
df = pd.DataFrame({'C1':[7,3,2,8,3,4,6,8,3,2],'C2':[2,5,4,8,8,8,3,2,8,4],'C3': [7,5,4,6,7,8,6,8,1,7],
'C4':[3,4,4,6,4,2,6,3,2,6],'C5':[6,4,0,8,4,2,6,6,7,8],'Year':[2010,2011,2012,2013,2014,2015,2016,2017,2018,2019]})
df.set_index('Year', inplace=True)
df1 =df[::-1]
df1
_1_CorrA =((df1.eq(8)) & (df1.shift(-1).isin([1,6])) & (df1.shift(-2).isin([1,6]))).sum(axis=1)==1
_1_CorrB =(((df1.eq(8)) & (df1.shift(-1).eq(8)) & (df1.shift(-2).eq(8))) |
((df1.eq(8)) & (df1.shift(-1).isin([1,6])) & (df1.shift(-2).isin([1,6])))).sum(axis=1)==1
Strategy = (((_1_CorrA) & (_1_CorrB)))
df1['Success']=np.where(Strategy,1,0)
【问题讨论】:
-
您的代码有效吗?你有什么问题?
-
你能解释一下为什么 2015 年是“成功的”吗?似乎不符合逻辑条件,
标签: python pandas boolean-logic