根据其他两列的值填充一个pandas列

时间:2020-05-14 06:52:04

标签: python pandas

我正在尝试填充一列:如果A行的值包含在B列的行中,请使用值A填充C列

我尝试过:

import pandas

df = pandas.DataFrame([{'A': "a", 'B': ["a"], 'C': ''},
                       {'A': "b", 'B': ["a", "b"], 'C': ''},
                       {'A': "d", 'B': [], 'C': ''},
                       {'A': "c", 'B': ["d", "e"], 'C': ''}])

def fill_row(df):

    if df["B"].str.contains(df["A"], regex = False):
        val = df["A"]
    else:
        val = ""

    return val

df['C'] = df.apply(fill_row, axis=1)

我的输出:

AttributeError:“列表”对象没有属性“ str”

好的输出:

df = pandas.DataFrame([{'A': "a", 'B': ["a"], 'C': 'a'},
                       {'A': "b", 'B': ["a", "b"], 'C': 'b'},
                       {'A': "d", 'B': [], 'C': ''},
                       {'A': "c", 'B': ["d", "e"], 'C': ''}])

2 个答案:

答案 0 :(得分:2)

in statemenet用于列表中的测试值:

def fill_row(df):

    if df["A"] in df['B']:
        val = df["A"]
    else:
        val = ""

    return val

df['C'] = df.apply(fill_row, axis=1)
print (df)
   A       B  C
0  a     [a]  a
1  b  [a, b]  b
2  d      []   
3  c  [d, e]   

答案 1 :(得分:2)

一种解决方法是列表理解:

df['C'] = [a  if a in b else c for a,b,c in zip(df.A,df.B, df.C)]

    A   B       C
0   a   [a]     a
1   b   [a, b]  b
2   d   []  
3   c   [d, e]