我正在尝试填充一列:如果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': ''}])
答案 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]