gpt4 book ai didi

python - 数据框中的条件串联

转载 作者:行者123 更新时间:2023-12-02 02:10:00 26 4
gpt4 key购买 nike

我有三组包含字母数字对象的代码(代码1、代码2 和代码3)。所有代码之间以分隔符(;)分隔,代码按顺序关联,如代码 1 的 A123 与代码 2 的 A 相关,代码 3 的 A445 相关,依此类推。代码3有一些重复或重复的代码。

我想要的输出是获得连接的“代码 4”,其中代码 1 和代码 2 根据这两个条件之一连接起来

a) 如果代码3中对应的代码没有重复值

b) 如果代码 3 中对应的代码有重复值,则需要使用代码 3 中最后一个重复值的位置对应的位置来连接代码 1 和代码 2(如 B678 R4,因为 A445 重复了两次代码3中,需要考虑A445的第4位来连接代码1和代码2)

让我知道是否可以使用任何逻辑来获取输出。提前致谢!

数据帧 df 的 Python 脚本是

df11 = pd.DataFrame({"code1": ["A123; A321; B478; B678; C567", "A321; A821; B448; B698; C577"], "code2": ["A; B5; N5; R4; H5", "A3; B; N; R7; H2"],"code3": ["A445; A323; A323; A445; A659", "A328; A328; A621; A442; A621"]},      index=[0, 1], )

所需的输出以及输入代码应如下所示 enter image description here

最佳答案

步骤:

  1. 使用 applymap 将每个值转换为列表。
  2. 分解数据框。
  3. 去掉多余的空间(如果有)。
  4. 根据 code3 列删除 df 中的重复项并保留最后一个值。
  5. 删除 code3 列并加入 code1 和 code2
  6. 最后,使用 groupby 将它们重新聚合以获得所需的输出。
df2 =(
df11.assign(
desired_output=df11.applymap(
lambda x: x.split(';'))
.apply(pd.Series.explode)
.applymap(str.strip)
.drop_duplicates(subset='code3', keep='last')
.drop('code3', 1)
.apply(' '.join, 1)
.groupby(level=0)
.agg('; '.join))
)

更新的答案:

df2 = (
df11.assign(
desired_output=
df11.apply(lambda s: s.str.split('; ').explode().str.strip())
.drop_duplicates(subset='code3', keep='last')
.drop('code3', 1)
.apply(' '.join, 1)
.groupby(level=0)
.agg('; '.join)
)
)

输出:

                          code1              code2  \
0 A123; A321; B478; B678; C567 A; B5; N5; R4; H5
1 A321; A821; B448; B698; C577 A3; B; N; R7; H2

code3 desired_output
0 A445; A323; A323; A445; A659 B478 N5; B678 R4; C567 H5
1 A328; A328; A621; A442; A621 A821 B; B698 R7; C577 H2

关于python - 数据框中的条件串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67846112/

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