Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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 从数据最多的三列(非NA)创建组合列_Python_Pandas - Fatal编程技术网

Python 从数据最多的三列(非NA)创建组合列

Python 从数据最多的三列(非NA)创建组合列,python,pandas,Python,Pandas,我有如下数据: import pandas as pd df = pd.DataFrame(data=[[1,-2,3,0,0], [0,0,0,4,0], [0,0,0,0,5]]).T df.columns = ['col1', 'col2', 'col3'] > df col1 col2 col3 1 0 0 -2 0 0 3 0 0 0 4 0 0 0 5 我想创建第四个Col4,它

我有如下数据:

import pandas as pd

df = pd.DataFrame(data=[[1,-2,3,0,0], [0,0,0,4,0], [0,0,0,0,5]]).T

df.columns = ['col1', 'col2', 'col3']
    
> df

  col1 col2 col3
    1   0   0
    -2  0   0
    3   0   0
    0   4   0
    0   0   5
我想创建第四个Col4,它采用非零的col

因此,结果将是:

  col1 col2 col3 col4
    1   0   0   1  
    -2  0   0   -2
    3   0   0   3
    0   4   0   4
    0   0   5   5
编辑:如果两个非零,则始终使用col1。此外,数字可能是负数。我已经更新了df以反映这一点。

以下是一个示例:

def func(a):
  a = set(a)
  assert len(a)==2  # 0 and another number
  for i in a:
    if i!=0:
      return i
df['col4'] = df.apply(func,axis=1)

可以使用最大列数

df['col4'] = df.max(axis=1)

如果列中有不同的非零值,应采用哪个值?为什么col1会在您的预期输出中发生变化?谢谢,这是一个拼写错误,现已修复。应始终提供Col1。如果您有更多要求,则应将其设置为“默认值”。“应始终提供Col1”请编辑您的问题。对于您的示例,df['col4']=df.max1可以工作,但可能是巧合。这是一个伟大而聪明的解决方案。但是,它不适用于负数。我已将此添加到问题中,很抱歉延迟。在这种情况下,用nan替换0可能有效。但是,列1不是默认值。df['col4']=df.replace0,np.nan.maxaxis=1