我有一个看起来像这样的数据框:
newDF = pd.DataFrame()
output_table = newDF
output_table['Keyword'] = 'abgeg','abgegang', 'abgegeb'
output_table['ID'] = '1', '2', '3'
还有一个看起来像这样的嵌套列表:
kal =[
['abgeglichen', 'abgeg'],
['abgegangen', 'abgegang'],
['abgegeben', 'abgegeb']
]
如您所见,子列表中index [1]处的元素是词干,并对应于数据框中“关键字”列中的值。
现在我想用索引[0]的子列表中的值替换数据框中的关键字列的值。
我想要的结果:
output_table['Keyword'] = 'abgeglichen','abgegangen', 'abgegeben'
output_table['ID'] = '1', '2', '3'
我尝试了以下代码:
def rep(kal, df):
keys = []
for line in kal:
for index, Keyword in df.iteritems():
if line[1] == Keyword:
a = Keyword.replace(Keyword, line[0])
keys.append(a)
return keys
我知道此函数只是返回列表键,但是我不太确定如何正确地执行操作以得到所需的结果。
有人可以帮忙吗?
答案 0 :(得分:3)
在将键切换为值并将值切换为输入列表中的键后使用series.replace
(后转换为dict)
output_table['Keyword']=output_table['Keyword'].replace({v:k for k,v in dict(kal).items()})
Keyword ID
0 abgeglichen 1
1 abgegangen 2
2 abgegeben 3
答案 1 :(得分:3)
更改嵌套列表中值的顺序,转换为dict,然后传递给Series.replace
:
output_table['Keyword'] = output_table['Keyword'].replace({a:b for b, a in kal})
print (output_table)
Keyword ID
0 abgeglichen 1
1 abgegangen 2
2 abgegeben 3