Python 根据其他两列的值填充一列

Python 根据其他两列的值填充一列,python,pandas,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'

我试图填充一列:如果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)
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': ''}])
我的输出:

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)
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': ''}])
AttributeError:“list”对象没有属性“str”

输出良好:

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)
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': ''}])

对于列表中的测试值,使用状态网中的

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]   

对于列表中的测试值,使用状态网中的

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]   

一种方法是列表理解:

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]  

一种方法是列表理解:

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]  
fill_row(df)
中,如果df[“B”].str.contains(df[“a”],regex=False),则尝试在
处将列表转换为字符串。
。相反,如果df[“B”]
中的df[“A”]
填充行(df)
中尝试将列表转换为
中的字符串,如果df[“B”].str.contains(df[“A”],regex=False)
。相反,如果df[“B”]中的df[“A”],只需尝试