首页 > 解决方案 > 从包含一个值的最右侧列中获取值并存储在新列中?

问题描述

以下是当前示例 df。

+-------+---+---+----+---+---+---+
| name  | 1 | 2 | 3  | 4 | 5 | 6 |
+-------+---+---+----+---+---+---+
| mark  | a | b | c  | d |   |   |
| joe   | a | b |    |   |   |   |
| bob   | a | b | c  | d | e | f |
| luke  | a |   |    |   |   |   |
| hana  | a | b | d  |   |   |   |
| kelly | a | b | c  |   |   |   |
+-------+---+---+----+---+---+---+

我想要的输出如下,“最终”列从包含值的最右侧列中提取值。

+-------+---+---+----+---+---+---+-------+
| name  | 1 | 2 | 3  | 4 | 5 | 6 | final |
+-------+---+---+----+---+---+---+-------+
| mark  | a | b | c  | d |   |   | d     |
| joe   | a | b |    |   |   |   | b     |
| bob   | a | b | c  | d | e | f | f     |
| luke  | a |   |    |   |   |   | a     |
| hana  | a | b | c  |   |   |   | c     |
| kelly | a | b | c  |   |   |   | c     |
+-------+---+---+----+---+---+---+-------+

我尝试使用以下 if 语句(以及其他一千种东西),但它似乎不起作用......

if df['2'].isna == True: 
  df['final']=df['1']
elif df['2'].isna == False and df['3'].isna == True: 
  df['final']=df['2']

我想我需要在这里使用一个函数?但是经过几个小时的阅读堆栈溢出和实验后,我被困住了。

标签: pythonpandas

解决方案


您需要创建函数,apply该函数将根据上下文长度取值。

import pandas as pd

df = pd.DataFrame({'name':['m','j','k'], 1:['a','a','a'], 2:['b','b',''], 3:['c','','']})

def function(row):
    if len(row[3]) > 0:
        return row[3]
    elif len(row[2]) > 0:
        return row[2]
    else:
        return row[1]

df['final'] = df.apply(function, axis=1)

输出:

  name  1  2  3 final
0    m  a  b  c     c
1    j  a  b        b
2    k  a           a

推荐阅读