如何使用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