我有一个列表值列表,如下所示:
res = [["a", "b", "b"], ["d", "e"], ["f", "g"]]
我有一个数据框,如下所示:
df__ = pd.DataFrame({'memberid': ['a1','a2','a3'],
'labels':[0,1,2]})
它看起来如下所示:
labels memberid
0 0 a1
1 1 a2
2 2 a3
我想根据prob
列添加另一个名为labels
的列,该列由res
列表组成。输出将与您运行以下内容时的结果相同:
df__ = pd.DataFrame({'memberid': ['a1','a2','a3'],
'labels':[0,1,2],
labels memberid prob
0 0 a1 a b b
1 1 a2 d e
2 2 a3 f g
基本上,我使用labels
值作为res
列表的索引,并填充prob
列。
我已经运行了以下代码:
for i in range(len(df__["labels"])):
k = df__.iloc[i]["labels"]
df__["prob"] = " ".join(res[k])
但是我没有从上面的代码中得到我想要的输出。我究竟做错了什么?
答案 0 :(得分:3)
重新判断你的错误,就在于:
df__["prob"] = " ".join(res[k])
您继续重新分配df__["prob"] =
1值,这是最新的" ".join(res[l])
因此,最后整列只是最后一个值。
要更正此问题,您可以更改为:
prob = []
for i in range(len(df__["labels"])):
k = df__.iloc[i]["labels"]
prob.append(" ".join(res[k]))
df__['prob'] = prob
此外,您可以使用map
和lambda
来实现相同的结果,这比您的尝试更有效:
import pandas as pd
df__ = pd.DataFrame({'memberid': ['a1','a2','a3'],
'labels':[0,1,2]})
res = [["a", "b", "b"], ["d", "e"], ["f", "g"]]
# you can map the values from '__labels' and feed to 'prob' with lambda
df__['prob'] = map(lambda x: ' '.join(res[x]), df__['labels'])
df__
labels memberid prob
0 0 a1 a b b
1 1 a2 d e
2 2 a3 f g