我想使用Pandas DataFrame的apply()方法创建一个名为s['C']
的列。
我的数据集类似于这个:
[In]:
s=pd.DataFrame({'A':['hello', 'good', 'my', 'pandas','wrong'],
'B':[['all', 'say', 'hello'],
['good', 'for', 'you'],
['so','hard'],
['pandas'],
[]]})
[Out]:
A B
0 hello [all, say, hello]
1 good [good, for, you]
2 my [so, hard]
3 pandas [pandas]
4 wrong []
我需要创建一个名为s['C']的列,其中每行的值是一个列表,根据列A中的单词是否在列B的列表中以及元素在列B的列表中的位置而定,由0和1组成。我的输出应该像这样:
[Out]:
A B C
0 hello [all, say, hello] [0, 0, 1]
1 good [good, for, you] [1, 0, 0]
2 my [so, hard] [0, 0]
3 pandas [pandas] [1]
4 wrong [] [0]
我一直在尝试使用函数和apply,但我仍然没有意识到错误出在哪里。
[In]:
def func(valueA,listB):
new_list=[]
for i in listB:
if listB[i] == valueA:
new_list.append(1)
else:
new_list.append(0)
return new_list
s['C']=s.apply( lambda x: func(x.loc[:,'A'], x.loc[:,'B']))
错误是:Too many indexers
我还尝试了以下方法:
[In]:
list=[]
listC=[]
for i in s['A']:
for j in s['B'][i]:
if s['A'][i] == s['B'][i][j]:
list.append(1)
else:
list.append(0)
listC.append(list)
s['C']=listC
错误是:KeyError: 'hello'
有什么建议吗?