gpt4 book ai didi

python - 将数据框中的逗号分隔值替换为另一个数据框中的值

转载 作者:行者123 更新时间:2023-12-01 11:11:42 25 4
gpt4 key购买 nike

这是我在 StackOverflow 上的第一个问题,如果我不够清楚,请原谅。我通常在这里找到我的答案,但这次我没有运气。可能我说的太笼统了,但我们开始吧。

我有两个格式如下的 Pandas 数据框

df1

+------------+-------------+
| References | Description |
+------------+-------------+
| 1,2 | Descr 1 |
| 3 | Descr 2 |
| 2,3,5 | Descr 3 |
+------------+-------------+

df2

+--------+--------------+
| Ref_ID | ShortRef |
+--------+--------------+
| 1 | Smith (2006) |
| 2 | Mike (2009) |
| 3 | John (2014) |
| 4 | Cole (2007) |
| 5 | Jill (2019) |
| 6 | Tom (2007) |
+--------+--------------+

基本上,df2 中的 Ref_ID 包含构成 df1References 字段中包含的字符串的 ID/p>

我想做的是替换 df1References 字段中的值,因此它看起来像这样:

+-------------------------------------+-------------+
| References | Description |
+-------------------------------------+-------------+
| Smith (2006); Mike (2009) | Descr 1 |
| John (2014) | Descr 2 |
| Mike (2009);John (2014);Jill (2019) | Descr 3 |
+-------------------------------------+-------------+

到目前为止,我必须处理具有 1-1 关系的列和 ID,这非常有效 Pandas - Replacing Values by Looking Up in an Another Dataframe

但我无法理解这个略有不同的问题。我能想到的唯一解决方案是重新迭代一个 for 和 if 循环,将 df1 的每个字符串与 df2 进行比较并进行替换。

恐怕,这会很慢,因为我有 ca。 2000 个唯一的 Ref_ID,我必须在类似于 References 的几列中重复此操作。

有人愿意为我指出正确的方向吗?

非常感谢。

最佳答案

让我们试试这个:

df1 = pd.DataFrame({'Reference':['1,2','3','1,3,5'], 'Description':['Descr 1', 'Descr 2', 'Descr 3']})
df2 = pd.DataFrame({'Ref_ID':[1,2,3,4,5,6], 'ShortRef':['Smith (2006)',
'Mike (2009)',
'John (2014)',
'Cole (2007)',
'Jill (2019)',
'Tom (2007)']})

df1['Reference2'] = (df1['Reference'].str.split(',')
.explode()
.map(df2.assign(Ref_ID=df2.Ref_ID.astype(str))
.set_index('Ref_ID')['ShortRef'])
.groupby(level=0).agg(list))

输出:

  Reference Description                                Reference2
0 1,2 Descr 1 [Smith (2006), Mike (2009)]
1 3 Descr 2 [John (2014)]
2 1,3,5 Descr 3 [Smith (2006), John (2014), Jill (2019)]

@Datanovice 感谢更新。

df1['Reference2'] = (df1['Reference'].str.split(',')
.explode()
.map(df2.assign(Ref_ID=df2.Ref_ID.astype(str))
.set_index('Ref_ID')['ShortRef'])
.groupby(level=0).agg(';'.join))

输出:

  Reference Description                            Reference2
0 1,2 Descr 1 Smith (2006);Mike (2009)
1 3 Descr 2 John (2014)
2 1,3,5 Descr 3 Smith (2006);John (2014);Jill (2019)

关于python - 将数据框中的逗号分隔值替换为另一个数据框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59617019/

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