Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 第一次出现的“返回”列;1“;在行内_Python_Python 2.7_Pandas_Multiple Instances - Fatal编程技术网

Python 第一次出现的“返回”列;1“;在行内

Python 第一次出现的“返回”列;1“;在行内,python,python-2.7,pandas,multiple-instances,Python,Python 2.7,Pandas,Multiple Instances,我有一个数据帧,如下所示: 当“col”列发生变化时,我需要扫描cola、colb、colc、cola1、colb1、colc1列,以确定“1”是否首次出现 然后,条件cola==cola1==1或colb==colb1==1或colc==colc1==1应该满足,并在新列“new_col”中返回该列名 输入: cola colb colc cola1 colb1 colc1 col 0 0 0 0 0 0 18

我有一个数据帧,如下所示:

当“col”列发生变化时,我需要扫描cola、colb、colc、cola1、colb1、colc1列,以确定“1”是否首次出现

然后,条件cola==cola1==1或colb==colb1==1或colc==colc1==1应该满足,并在新列“new_col”中返回该列名

输入:

     cola   colb  colc  cola1 colb1 colc1  col
      0       0    0     0     0     0      18
      1       0    0     1     1     0      18
      1       0    0     1     1     0      18
      1       0    0     1     1     0      18
      1       0    0     1     1     0      18
      0       0    0     0     0     0      24
      0       1    0     0     1     0      24
      0       1    0     0     1     0      24
      0       1    0     0     1     0      24
      0       1    0     0     1     0      24
      0       0    0     0     1     0      10
预期产出:

     cola   colb  colc  cola1 colb1 colc1  col  New_col
     0       0    0     0     0     0      18    
     1       0    0     1     1     0      18
     1       0    0     1     1     0      18
     1       0    0     1     1     0      18
     1       0    0     1     1     0      18
     0       0    0     0     0     0      24     cola
     0       1    0     0     1     0      24
     0       1    0     0     1     0      24
     0       1    0     0     1     0      24
     0       1    0     0     1     0      24
     0       0    0     0     1     0      10    colb  

一个几乎完整的答案:

首先,计算您正在使用的条件并将其放入列中:

df['conda'] = (df['cola'] == 1) & (df['cola1'] == 1)
df['condb'] = (df['colb'] == 1) & (df['colb1'] == 1)
df['condc'] = (df['colc'] == 1) & (df['colc1'] == 1)

df['anycond'] = df['conda'] | df['condb'] | df['condc']
第二个,定义一个函数,该函数在任何条件为真时立即接受第一个真条件(a,
b
c
):

def get_first_condition(g):
    if not g['anycond'].any():
        return np.nan
    mask = g.loc[g['anycond'], ['conda', 'condb', 'condc']].iloc[0].values
    return np.array(['cola', 'colb', 'cocl'])[mask][0]
第三个,应用于按
col
分组的数据帧:

df.groupby('col').apply(get_first_condition)

col
10     NaN
18    cola
24    colb

第四个,只需使用此结果填充新列。您需要进行一些换档。

如果所有3个条件都满足,该怎么办。你想要什么输出?有任何优先权吗?我不明白为什么输出在它的行中。因为这似乎是前一组的首次出现。你能解释一下吗?在第五行,列“col”的值从0变为1。因此,我需要扫描此行上方的所有其他列,以查找第一次出现的“1”。要返回的输出应该满足:仅当cola和cola1=1或colb和colb1=1或colc和colc1=1时。我们需要第一条注释的答案。我猜它应该输出第一列等于1。这是标题中的问题。但是示例输出没有任何意义,因为在第6行中没有等于1的列,在最后一行中col不等于1。