Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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_If Statement_Hierarchy_Calculated Columns - Fatal编程技术网

如何使用python根据条件在新列中返回列的值

如何使用python根据条件在新列中返回列的值,python,pandas,if-statement,hierarchy,calculated-columns,Python,Pandas,If Statement,Hierarchy,Calculated Columns,我有一个三列的数据框 a b c [1,0,2] [0,3,2] [0,0,2] 需要根据层次结构创建第四列,如下所示: 如果a列有值,则d列=a列 如果a列没有值,但b列有值,则d列=b列 如果a列和b列没有值,但c列有值,则d列=c列 a b c d [1,0,2,1] [0,3,2,3] [0,0,2,2] 我是python的初学者,不知道从哪里开始 编辑:我尝试了以下操作,但如果a列为空或无,它们都不会在d列中返回值 df['d'] = df['a'] df.loc[

我有一个三列的数据框

 a b c
[1,0,2] 
[0,3,2] 
[0,0,2] 
需要根据层次结构创建第四列,如下所示:

如果a列有值,则d列=a列

如果a列没有值,但b列有值,则d列=b列

如果a列和b列没有值,但c列有值,则d列=c列

 a b c d
[1,0,2,1] 
[0,3,2,3] 
[0,0,2,2] 
我是python的初学者,不知道从哪里开始

编辑:我尝试了以下操作,但如果a列为空或无,它们都不会在d列中返回值

df['d'] = df['a']
df.loc[df['a'] == 0, 'd'] = df['b']
df.loc[~df['a'].astype('bool') &  ~df['b'].astype('bool'), 'd'] = df['c']
试试这个(df是您的数据帧)


一个简单的一行是

df['d'] = df.replace(0, np.nan).bfill(axis=1)['a'].astype(int)

逐步可视化 将无值转换为NaN

     a    b  c
0  1.0  NaN  2
1  NaN  3.0  2
2  NaN  NaN  2
现在沿行向后填充值

     a    b    c
0  1.0  2.0  2.0
1  3.0  3.0  2.0
2  2.0  2.0  2.0
现在选择所需列,即
'a'
并创建一个新列
'd'

输出

   a  b  c  d
0  1  0  2  1
1  0  3  2  3
2  0  0  2  2

这回答了你的问题吗?如果可能,请粘贴数据,似乎“a”有空格或其他值它只有NaN和int()-从1.0到7.0我尝试过这一点,但如果列a为0或非,它不会在列“d”中返回值。我已添加一些无值检查。如果“无”值的格式不同(如文本“无”或“Nan”等),请调整代码或让我知道如果列a为0或“无”,则此值也不会在列“d”中返回值。谢谢,但是,整个df中还有其他列不需要更改。我将尝试创建一个新的df,这样做,并将数据帧重新合并到其他列中。我所描述的内容只是为了说明/理解。代码的工作原理与创建新列一样,而不更改其他数据@DCM_在坦克上加油。这解决了我的问题。由于原始df中的a/b/c列顺序不正确(b/a/e/c/),我创建了一个新df,使用此方法并在原始df中实现了d列。
df['d'] = df.replace(0, np.nan).bfill(axis=1)['a'].astype(int)
     a    b  c
0  1.0  NaN  2
1  NaN  3.0  2
2  NaN  NaN  2
     a    b    c
0  1.0  2.0  2.0
1  3.0  3.0  2.0
2  2.0  2.0  2.0
   a  b  c  d
0  1  0  2  1
1  0  3  2  3
2  0  0  2  2