gpt4 book ai didi

python - 按行值比较数据帧列并选择具有匹配模式的列

转载 作者:行者123 更新时间:2023-11-28 21:31:56 24 4
gpt4 key购买 nike

我有一个 df,如下所示:

id1     id2     id3    id4    id5

9890 abc123 CI652 125 nan

156 CI951 9895 nan nan

CI632 198 nan nan nan

nan nan 145 nan CI258

9892 9893 nan nan nan

abc556 nan abc887 nan CI642

我想浏览所有列并根据优先级选择一个值:

abc* > 98* > 除“nan” > nan 之外的任何内容

根据所选的值,我想创建并填充新的 df/列。预期输出如下:

id1     id2     id3    id4    id5    output

9890 abc123 CI652 125 nan abc123

156 CI951 9895 nan nan 9895

CI632 198 nan nan nan CI632

nan nan 145 nan CI258 145

9892 9893 nan nan nan 9892

abc556 nan abc887 nan CI642 abc556

我的逻辑是使用 for 循环迭代 df 中的每一行,然后使用一些 if-else 逻辑按优先级比较值

有没有更好的方法来实现这个目标?任何见解表示赞赏。 TIA!

最佳答案

不确定这是否是最好的方法,您已尝试通过 startswith 检查条件并根据您的优先级对它们进行排名,然后使用 df.lookup:

m=df.astype(str)

c1=m.applymap(lambda x: x.startswith('abc'))*3
c2=m.applymap(lambda x: x.startswith('98'))*2
c3=df.notna().astype(int)
s=(c1+c2+c3).idxmax(1)

df=df.assign(output=df.lookup(s.index,s.values))

      id1     id2     id3    id4    id5  output
0 9890 abc123 CI652 125.0 NaN abc123
1 156 CI951 9895 NaN NaN 9895
2 CI632 198 NaN NaN NaN CI632
3 NaN NaN 145 NaN CI258 145
4 9892 9893 NaN NaN NaN 9892
5 abc556 NaN abc887 NaN CI642 abc556

关于python - 按行值比较数据帧列并选择具有匹配模式的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57309101/

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