Python 第一次出现的“返回”列;1“;在行内
我有一个数据帧,如下所示: 当“col”列发生变化时,我需要扫描cola、colb、colc、cola1、colb1、colc1列,以确定“1”是否首次出现 然后,条件cola==cola1==1或colb==colb1==1或colc==colc1==1应该满足,并在新列“new_col”中返回该列名 输入: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
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。