gpt4 book ai didi

python - Pandas 基于另一列添加新列

转载 作者:行者123 更新时间:2023-11-30 23:18:11 26 4
gpt4 key购买 nike

我有一个列表值列表,如下所示:

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

我想基于 labels 列添加另一个名为 prob 的列,该值由 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])

但是我没有从上面的代码中得到我想要的输出。我究竟做错了什么?

最佳答案

关于你的错误,它在于:

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

您也可以使用 maplambda,这样可以获得相同的结果,这比您的尝试更有效:

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

关于python - Pandas 基于另一列添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26842550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com